A year ago, asking an AI to write syntactically correct Lisp was an exercise in frustration. Models hallucinated packages, invented symbols, and mangled parentheses. That has changed. One developer, Joe Marshall, reports that today’s models can vibe code moderately sized Common Lisp programs that actually compile and pass tests.
The Workflow
Marshall uses Copilot CLI and Gemini CLI. He starts with a blank project directory, creates an .asd file that loads packages.lisp and a minimal main file, then bootstraps from there using ASDF or Quicklisp. The approach is bottom-up: data structures and utilities first, a stub-filled main function second, then iterative feature extension.
The agent loop is straightforward. The model adds code, adds tests, runs all tests, debugs failures, and considers the task done only when everything passes. Marshall’s review process reflects how much confidence has increased: if the code compiles and the tests pass, he accepts it with a glance rather than a line-by-line read.
The One Failure Mode Worth Knowing
Closing parentheses. The model tokenizes them in groups of two or three, and the probability of a )) token is not significantly different from ))), so it picks the wrong one. When that happens, some models thrash, adding and removing parentheses from different places trying to rebalance. Marshall’s fix: pause the agent and fix the parens manually before resuming.
Technical Debt and Refactoring
The generated code accumulates technical debt if you accept it as-is. Marshall’s counter is periodic cleanup sessions: ask the model to enumerate the technical debt, rank it by importance, then address each item in sequence. After a couple of cleanup passes, he reports the code looks no worse than many professional codebases.
One caveat: the model does not know when to stop refactoring. Give it a single, specific refactoring task rather than open-ended permission to improve things, or it will keep going indefinitely.
The Payoff
Marshall says he can build in a weekend what previously took a month. The model handles obvious, mechanical code faster than any human typist, which frees up mental bandwidth for higher-level design decisions. For solo developers who want to prototype in a less mainstream language without fighting the tooling alone, this workflow is worth a look.
