Autolith: the agent is a live Lisp image
A terminal coding agent written in Common Lisp and running inside SBCL. It owns its model loop, tools, conversations, memory, self-modification, checkpoints, and recovery while the conversation continues.
Source remains authoritative. The image remains alive.
One agent owns the whole loop
Autolith is not a wrapper around another coding-agent process. Its Common Lisp image contains the provider client, terminal interface, tool registry, conversation state, persistent memories, workspace agenda, and the code that decides what happens next.
It talks directly to the ChatGPT Codex subscription service. The Codex CLI is neither launched nor bundled. Filesystem, shell, search, memory, and Lisp operations remain explicit tools with visible results.
- Runtime
- SBCL 2.6.4
- Platform
- Linux x86-64
- Interface
- responsive terminal with editable queued input
- Provider
- direct ChatGPT Codex subscription transport
- Language
- Common Lisp
- Repository
- luciusmagn/autolith
self.inspect active bindings and docs
self.source complete tracked definitions
self.eval immediate active-image probes
self.redefine install one definition live
self.persist-definition install, check, and retain
self.checkpoint save a working generation
lisp.start named pristine or saved REPL
lisp.eval exploratory Common Lisp
lisp.source matching hash-verified SBCL source
lisp.run-tests ASDF tests outside the agent heap
lisp.save-image immutable instrumented worker
Change a definition without ending the conversation
Autolith can inspect and replace complete functions, methods, classes, macros, conditions, and global settings in its running image. An exploratory change takes effect immediately and is recorded in an append-only mutation journal.
A useful change can then become a private image commit. The commit contains a manifest and a complete executable Lisp replay script, retained in a separate private Git history. It changes the active agent without quietly patching the tracked source repository.
→ self.source APPLICATION-TOOL-CALL-ENTRY
← complete tracked DEFMETHOD
→ self.redefine
(defmethod application-tool-call-entry ...)
← compiled and installed in the active image
→ self.diff
← one reconstructible live mutation
→ self.commit "Improve tool-call presentation"
← private image commit commit-id
complete reconstruct.lisp retained in private Git
A working state has several kinds of memory
Source, conversations, useful facts, live mutations, exact heaps, and disposable experiments have different lifetimes. Autolith keeps them separate instead of pretending that one database or one saved core is everything.
| Conversations | Append-only portable S-expressions with exact resume commands and crash-tail repair. |
|---|---|
| Memories | Workspace or global facts, preferences, and decisions with bounded prompt recall. |
| Agendas | Short workspace tasks and notes, available in full on every request. |
| Private image commits | Complete replay scripts for durable user-specific definitions and settings, retained in private Git. |
| Generations | A saved active core, exact tracked source commit, reconstruction script, manifest, and journal position. |
| Worker images | Immutable experimental SBCL cores with parentage and durable notes, never selected as the active agent. |
| Recovery | A separately built pristine image that can inspect a crash and select a known-working generation without loading the damaged core. |
Field notes
| Terminal | Multiline editing, completion, ordinary scrollback, and drafts that remain editable while tools and model responses run. |
|---|---|
| Workspace search | Warm in-process path, glob, plain, regular-expression, fuzzy, and multi-pattern search through fff. |
| Implementation work | Hash-verified matching SBCL source, named isolated REPLs, and side-by-side pristine and instrumented worker images. |
| Source boundary | Autolith can develop its own repository when deliberately run there; private live mutations never masquerade as tracked source commits. |
| Immutable mode | An optional startup mode keeps self-inspection while withholding active-image mutation tools. |
Run the pinned Linux build
Autolith currently targets Linux x86-64 and pins SBCL, every Lisp dependency, and its native helper sources. Nix can build and run the package directly, or the repository bootstrap can materialize the same locked project setup.
Autolith executes model-generated code with your user privileges. Its process boundaries protect reliability, not against hostile code. Use it as a development agent, not as a security sandbox.
Run the flake
$ nix run github:luciusmagn/autolith -- --auth
$ nix run github:luciusmagn/autolith
Build from the repository
$ git clone https://github.com/luciusmagn/autolith
$ cd autolith
$ ./script/bootstrap
$ ./script/check
$ ./bin/autolith --auth
$ ./bin/autolith