Hi, Someone on IRC (#guix) didn't have guile-json in their environment or something. When they did "./pre-inst-env guix lint", that failed with "guix: lint: command not found", which is bogus, since guix/scripts/lint.{scm,go} existed. The issue was tracked down to the 'run-guix-command' procedure, in particular the definition of module: (define module ;; Check if there is a matching extension. (match [something that returns #false in this situation] (#f (catch 'misc-error (lambda () (resolve-interface `(guix scripts ,command))) (lambda _ (let ((hint (command-hint command (commands)))) (format (current-error-port) (G_ "guix: ~a: command not found~%") command) (when hint (display-hint (format #f (G_ "Did you mean @code{~a}?") hint))) (show-guix-usage))))) (file [a case that doesn't apply here]))) To test the hypothesis that exception handling went wrong, the exception handling was modified to do some 'pk': (catch 'misc-error (lambda () (resolve-interface `(guix scripts ,command))) (lambda _ (pk 'what _) ; <---- new line! [old code])) which resulted in: ;;; (what (misc-error #f "no code for module ~S" ((json)) #f)) My proposal to avoid the wrong error message is (untested): ;; #:ensure #false: don't create an empty module when not found ;; (why is #:ensure #true even the default?). (let ((module (resolve-module `(guix scripts ,command) #:ensure #false))) (if module (module-public-interface module) ; script module was found [display hints & error message & guix-usage etc.])) (Reported-By: foobarxyz on #guix) Greetings, Maxime