{"slug": "autolith-a-self-modifiable-general-purpose-lisp-ai-agent", "title": "Autolith: A self-modifiable general purpose Lisp AI agent", "summary": "Lambda Symbolics released Autolith, a self-modifiable general-purpose Lisp AI agent that runs inside a live Common Lisp image and can inspect, modify and roll back its own code and state. Autolith ships as standalone binaries and via Nix for Linux (x86_64 + aarch64), MacOS (x86_64 + aarch64), FreeBSD, NetBSD and OpenBSD (x86_64), with Windows (x86_64) supported from a source checkout via script\\bootstrap.ps1 and bin\\autolith.cmd. The agent authenticates against providers including ChatGPT, Gemini, Grok, Nous, Anthropic, Fireworks, OpenCode, OpenRouter and Mistral, and exposes self.* tools for live self-inspection plus lisp.* tools that run in heap-isolated SBCL workers separate from the agent's image.", "body_md": "Autolith, or AL, is a terminal agent inside a live Common Lisp image. It can observe, self-modify, discover, introspect its own code, its live state and what it’s doing. This lets Autolith adapt to the user’s preferences or to what is needed for the task. This may sound unstable, but Autolith creates generations of this image your or it can rollback to. Even a full frontal lobotomy is not a showstopper as AL will just reload into a recovery image and diagnose and optionally fix the issue.\n\nAutolith has a moderate focus on good ergonomics, good visuals, following XDG standards and similar, and minimal intrusiveness. It is not a “small game engine”, but it is pretty close to a Lisp Machine.\n\nAutolith supports the following platforms\n\n- Linux (x86_64 + aarch64)\n- MacOS (x86_64 + aarch64)\n- FreeBSD (x86_64)\n- NetBSD (x86_64)\n- OpenBSD (x86_64)\n- Windows (x86_64), from a source checkout\n\nAdding more platform support is always welcome!\n\nAutolith questions and issues can be discussed on the\n  [Lambda Symbolics Zulip](https://zulip.lambda-symbolics.com). Account confirmation emails are likely to land\n  in spam.\n\nAutolith supports Linux, MacOS and the BSDs via standalone binary releases\n  and Nix. Windows runs from a source checkout through `script\\bootstrap.ps1`\n  and `bin\\autolith.cmd`; see the guide.\n\nThe curl-into-sh installer installs or updates the packaged release for your\n  platform. Inspect the [installer script](https://sh.lambda-symbolics.com/autolith) before piping it into a shell, or trust\n  us with your life, hehe.\n\n```\ncurl -fsSL https://sh.lambda-symbolics.com/autolith | sh\n```\n\nNix also supplies the complete runtime:\n\n```\nnix run github:lambda-symbolics/autolith\n```\n\nTo build from a source checkout instead, follow the\n  [guide](https://github.com/lambda-symbolics/autolith/blob/master/docs/guide.org)’s Source checkout section.\n\nAuthenticate providers either with web flows or API keys:\n\n```\nautolith auth chatgpt\nautolith auth gemini\nautolith auth grok\nautolith auth nous\nautolith auth anthropic\nautolith auth fireworks\nautolith auth opencode\nautolith auth openrouter\nautolith auth mistral\n```\n\nThen start Autolith:\n\n```\nautolith\n```\n\nAutolith is inline by default. Start one session in the application-owned\n  fullscreen viewport with `autolith --fullscreen`, or save the preference at the\n  Autolith prompt for future launches:\n\n```\n(preferences-set-fullscreen (application-configuration *active-application*) t)\n```\n\nFullscreen keeps the transcript scrollable and pins the composer at the bottom.\n  Use `PageUp`, `PageDown`, `Ctrl-Home`, `Ctrl-End`, or the mouse wheel to move\n  through the transcript. An empty session displays a centered Lisp-machine startup\n  panel above the composer.\n\nIn Autolith, the message window is just a LISP repl with familiar interactivity, you can make prompts in regular prose, or you can enter a form when you need an exact local action or a computed prompt.\n\n```\n(describe 'application)\n(resource.read :uri \"workspace:.\")\n(prompt (read-file \"review-notes.org\"))\n```\n\nThe form runs in the active image.\n\nAutolith has a well organized suite of **self** tools for inspecting and modifying itself live.\n  You would think that doing live brain surgery on yourself would be catastrophic, but\n  Autolith can triage and revert changes.\n\nSimilar set of **lisp** tools let Autolith avoid littering temporary Python3 scripts, instead\n  doing these things in its bundled Common Lisp runtime, but in REPLs that are pristine and\n  separate from the agent’s image. That’s one less system dependency, and it also lets Autolith\n  observe its scripts better.\n\nAutolith can decide if it wants to keep the same Lisp REPL alive or to create a pristine one, and can maintain multiple.\n\n```\n(lisp.eval :forms '(\"(+ 20 22)\") :repl \"scratch\")\n(lisp.describe :designator \"APPLICATION\" :target \"self\")\n(self.status)\n```\n\n`lisp.*` uses named, heap-isolated SBCL workers and can target read-only active\n  inspection explicitly. `self.*` changes or reports the active Autolith image.\n\nAutolith can treat a large input as an environment instead of a prompt. `infer` runs one\n  bounded inference over context you pass explicitly, returns a Lisp value, and never touches\n  your conversation:\n\n```\n(infer \"List the invariants this file maintains.\"\n       :context (list #p\"src/conversation/store.lisp\"))\n```\n\nFrames recurse, fan out through `rlm-map`, and return validated data instead of prose when you\n  give them a JSON Schema contract. Calls, tokens, and recursion depth come out of one shared\n  budget, so a fan-out cannot outspend its allocation, and the private frame conversations cannot\n  pollute yours or your prompt cache.\n\n`rlm-complete` is the full form: the input is interned as a content-addressed object, the root\n  model sees only its label, size, and digest, and it writes Lisp in an isolated environment to\n  slice, search and sub-infer over it. Inputs larger than the provider context window are processed\n  this way.\n\n```\n(rlm-complete \"Summarize every incident in this log.\"\n              :context #p\"/var/log/huge.log\")\n```\n\nThe model reaches the same operations through the `rlm.infer`, `rlm.map` and `rlm.complete` tools.\n  Every frame persists its own trace under `data/inferences/`, readable afterwards through\n  `inference:<trace-id>` URIs, so you can still ask why an inference concluded what it did.\n\nSee [RLM](https://github.com/lambda-symbolics/autolith/blob/master/docs/rlm.org) for contracts, budgets, policies and the design decisions.\n\nWhen you type a message like:\n\n```\nHello Autolith! How do you do?\n```\n\nIt is just syntactic sugar for:\n\n```\n(prompt \"Hello Autolith! how do you do?\")\n```\n\nThis omits the default value for the **:to** parameter:\n\n```\n(prompt :to 'autolith \"Hello Autolith! how do you do?\")\n```\n\nSo if you ask Autolith to delegate work (it is likely to do it on its own with mostmodels), so it can keep working\n  while the children run, you can talk to them as well.\n  If one visible child is named `test-review`, you steer the sub-agent by prompting it:\n\n```\n(prompt :to 'test-review\n        \"Run the focused tests and report only failures.\")\n```\n\nAs a convenience, its next useful verbal response returns to the primary terminal.\n\nIf you want to pull an update, you can do so easily:\n\n```\n(update)\n```\n\nOr do **autolith update** in your shell.\n\nPlain text, callable commands, tools, and explicit Common Lisp share Autolith’s REPL (or prompt window/input, as you may know it from other agents). This means that you can construct scripts easily, and you can call tools just like the clanker does it.\n\nExact forms can compute prompts or return results, and the model will see them.\n\nFor example, if you put your prompt to a file, you can just do:\n\n```\n(prompt (read-file \"path\"))\n```\n\nYou could do templating, too, if you like.\n\nAutolith defaults to inline presentation and generally uses your terminal’s base\n  16 colors. Use `--fullscreen` for an application-owned transcript viewport.\n\nInline mode emits prompt markers, so terminals with shell-prompt navigation can also jump between messages to Autolith.\n\nThe line editor is the fairly powerful [clinedi](https://github.com/luciusmagn/clinedi), it should support all the editing niceties\n  and shortcuts you are used to.\n\nConversations use append-only readable files.\n\nSteering messages and follow-ups survive active-image crashes and abrupt shutdowns in a conversation-scoped vault. The vault is (intentionally) not resubmitted automatically, since you may want to diagnose a crash before you resume your previous work.\n\nYou can use the following commands to interact with the vault:\n\n```\n(vault)         ; see what's in da vault\n(vault-restore) ; re-submit follow-ups and steering messages in the vault\n(vault-discard) ; delete vault contents\n```\n\nFinally, checkpoints, private mutation commits, generations, and a pristine recovery image keep live work reconstructible, so it’s hard to terminally lobotomize AL.\n\nAutolith is ISC licensed. See [LICENSE](https://github.com/lambda-symbolics/autolith/blob/master/LICENSE).", "url": "https://wpnews.pro/news/autolith-a-self-modifiable-general-purpose-lisp-ai-agent", "canonical_source": "https://github.com/lambda-symbolics/autolith", "published_at": "2026-10-06 06:49:06+00:00", "updated_at": "2026-10-06 07:19:32.550957+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools", "artificial-intelligence"], "entities": ["Autolith", "Lambda Symbolics", "Common Lisp", "SBCL", "ChatGPT", "Gemini", "Anthropic", "OpenRouter"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/autolith-a-self-modifiable-general-purpose-lisp-ai-agent", "markdown": "https://wpnews.pro/news/autolith-a-self-modifiable-general-purpose-lisp-ai-agent.md", "text": "https://wpnews.pro/news/autolith-a-self-modifiable-general-purpose-lisp-ai-agent.txt", "jsonld": "https://wpnews.pro/news/autolith-a-self-modifiable-general-purpose-lisp-ai-agent.jsonld"}}