diff --git a/CHANGES.md b/CHANGES.md
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,7 +1,14 @@
 * Hackage: <http://hackage.haskell.org/package/crackNum>
 * GitHub:  <http://github.com/LeventErkok/crackNum/>
 
-* Latest Hackage released version: 3.19, 2026-08-13
+* Latest Hackage released version: 3.20, 2026-08-13
+
+### Version 3.20, 2026-08-13
+
+  * Fix tool lookup in both GUIs: a *directory* named `crackNum` (or `z3`) sitting
+    on the PATH was accepted as the executable, since directories carry the search
+    bit and so look executable. The GUI would then fail with a "permission denied"
+    on that directory. We now require a regular file.
 
 ### Version 3.19, 2026-08-13
 
diff --git a/GUI/tclGUI/crackNum.tcl b/GUI/tclGUI/crackNum.tcl
--- a/GUI/tclGUI/crackNum.tcl
+++ b/GUI/tclGUI/crackNum.tcl
@@ -11,7 +11,12 @@
     set path [split $raw :]
     foreach dir $path {
         set candidate [file join $dir $name]
-        if {[file executable $candidate]} { return $candidate }
+        # 'file executable' is true for directories too (they carry the search
+        # bit), so a directory named e.g. crackNum sitting on the PATH would
+        # otherwise be picked up and then fail to execute. Insist on a file.
+        if {[file isfile $candidate] && [file executable $candidate]} {
+            return $candidate
+        }
     }
     return ""
 }
diff --git a/crackNum.cabal b/crackNum.cabal
--- a/crackNum.cabal
+++ b/crackNum.cabal
@@ -1,6 +1,6 @@
 Cabal-version      : 2.2
 Name               : crackNum
-Version            : 3.19
+Version            : 3.20
 Synopsis           : Crack various integer and floating-point data formats
 Description        : Crack IEEE-754 float formats and arbitrary sized words and integers, showing the layout.
                      .
