LLMs are surprisingly good with Lisp dialects. With a caveat - when you give them actual (homoiconic) REPL. It makes little sense treating a Lisp just like any other language, which is roughly the Unix/pipe model - batch-style. Agent spawns process -> reads stdout/stderr -> spawns next process. State lives in-between the calls and in files. Each tool invocation is stateless.
Things get far more interesting when you give an LLM a true Lisp REPL. LLM stops guessing and starts empirically analyzing current state of things and produces working solution faster, costing far less tokens.
Like if you ask any experienced dev to write a Clojure program giving them nothing but a notepad.exe, they'd immediately fail without structural editing and connected REPL. Why people expect that LLM somehow, magically do it better?