diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index a32a507fcaa8748af2af321ab9d48f88226b8d4f..0ee5b52d04810cd0cc34cc540cca2e7338745793 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -33,9 +33,6 @@ stages:
     only:
         - master
         - merge_requests
-    except:
-        variables:
-            - $CI_COMMIT_TITLE == /.*\[gen-appimage\].*/
 
 variables:
     GIT_DEPTH: 3 # No need to clone all the history
@@ -118,9 +115,15 @@ build_clang:
 #     script: utils/scripts/validate.bash --build=clang --step=launch --test=simple
 
 #################################################
-### AppImage ####################################
+### Packages ####################################
 #################################################
 
+kagari_deploy:
+    <<: *main_tests
+    <<: *bin_generation
+    needs: ["env_sanitize"]
+    script: utils/scripts/validate.bash --step=kagari
+
 appimage_lektor_lkt:
     <<: *bin_generation
     <<: *main_tests
diff --git a/utils/scripts/kagari b/utils/scripts/kagari.py
similarity index 100%
rename from utils/scripts/kagari
rename to utils/scripts/kagari.py
diff --git a/utils/scripts/validate.bash b/utils/scripts/validate.bash
index 3015ca4513f4f611c589b3420e8d73d8304716c9..8f6dd4d865e1155b730030153d813e2c2989267b 100755
--- a/utils/scripts/validate.bash
+++ b/utils/scripts/validate.bash
@@ -174,12 +174,16 @@ function do_build ()
 # - $*                      Which AppImage to make? Like -klkt or -lkt       #
 function do_copy ()
 {
-    check_cd $LKT_BUILD
-    rm "$LKT_BUILD/*-`arch`.AppImage"
-    check_make appimage$*
-    mkdir -p "$LKT_TARGET_DIR/$(date +%F)"
-    check_cp "$LKT_BUILD/*-`arch`.AppImage" "$LKT_TARGET_DIR/$(date +%F)"
-    check_cd $LKT_DIR
+    [ "x$1" = "xkagari" ] && {
+        cp "$LKT_SRC/utils/scripts/kagari.py" "$LKT_TARGET_DIR/$(date +%F)/kagari";
+    } || {
+        check_cd $LKT_BUILD;
+        rm "$LKT_BUILD/*-`arch`.AppImage";
+        check_make appimage$*;
+        mkdir -p "$LKT_TARGET_DIR/$(date +%F)";
+        check_cp "$LKT_BUILD/*-`arch`.AppImage" "$LKT_TARGET_DIR/$(date +%F)";
+        check_cd $LKT_DIR;
+    }
 }
 
 ### PERFORM THE STEPS ########################################################
@@ -196,8 +200,10 @@ function do_steps ()
     local _copy_all=
     local _copy_klkt=
     local _check_configure=
+    local _copy_kagari=
     for step in $LKT_STEP ; do
         case "$step" in
+            kagari)          _copy_kagari="yes";;
             check-configure) _check_configure="yes";;
             build)           _build="yes";;
             configure)       _configure="yes";;
@@ -209,6 +215,7 @@ function do_steps ()
         esac
     done
 
+    [ "x$_copy_kagari"     = "xyes" ] && do_copy kagari
     [ "x$_format"          = "xyes" ] && do_format          # astyle?
     [ "x$_prepare"         = "xyes" ] && do_prepare         # mkdir...
     [ "x$_check_configure" = "xyes" ] && do_check_configure # autoreconf?