I've heard about something about Guile sockets and REPLs, so I've investigated a bit and I think I found a Guix bug instead of a Guile bug (and is unrelated to sockets or REPLs): In the error message, there is a mention of "#~". Perhaps somehow, no hash extension (not sure about terminology) for G-exps installed? This is confirmed by: scheme@(emacs-guix) [2]> (fluid-ref* %read-hash-procedures 0) $24 = ((#\. . #)) It's also not a matter of some parametrisation: scheme@(emacs-guix) [2]> (fluid-ref* %read-hash-procedures 1) $25 = () scheme@(emacs-guix) [2]> (fluid-ref* %read-hash-procedures 2) $26 = () How does this happen? (after all, (guix scripts deploy) imports (guix gexp)) Going by the backtrace I get: [...] In guix/ui.scm: 2263:7 17 (run-guix . _) In ice-9/boot-9.scm: 1747:15 16 (with-exception-handler # _ #:unwind? _ #:unwind-for-type _) In guix/ui.scm: 2184:20 15 (show-guix-help) In srfi/srfi-1.scm: 691:23 14 (filter-map # _ . _) In ice-9/ports.scm: 433:17 13 (call-with-input-file _ _ #:binary _ #:encoding _ #:guess-encoding _) In guix/ui.scm: 2109:16 12 (_ #) In ice-9/read.scm: 734:20 11 (%read # # _) 210:5 10 (read-parenthesized #\)) [...] That is, one of the earliest things that happen, is that (guix ui) reads the file "(guix scripts deploy)" -- it doesn't do the reflection equivalent of (use-module ...) which will run the imports before reading the rest of the code. As such, the hash extension isn't installed even though it is required to read the file and even though the required module (guix gexp) is listed in the imports! To fix this, I propose modifying 'source-file-command' in (guix ui), by adding a clause to (match (read port) (('define-command _ ('synopsis synopsis) _ ...) (command command-name synopsis 'main)) (('define-command _ ('category category) ('synopsis synopsis) _ ...) (command command-name synopsis category)) ((? eof-object?) #f) (_ (loop))))))) which recognises (define-module [...] #:use-module MODULE ...), and if MODULE is (guix gexp) or (srfi srfi-88), then does (resolve-module 'MODULE #:ensure #false) before continuing with (loop). (Untested!) Greetings, Maxime.