Basilisk is a hull class: a ridged bio-hull, grown to order in various tonnages. What you are looking at is the yard that lays them down. One incantation grows a hull, outfits it and musters a crew, and there is a working ship under you — in whatever galaxy you keep, at whatever frontier you happen to be working.
Nothing here is assembled by hand. A vessel's particulars are written down before it exists — the roster is a file — so any yard holding that file can lay down the same ship tomorrow, or a hundred of them. That is what makes them worth sending out, including to places nobody has put one before.
A containerized development stack described in one s-expression file: an Emacs daemon, one or more Common Lisp engines, an optional reverse proxy and a watchdog. One command reads the file, pulls the images, starts the containers on a shared Docker network, and writes MCP client configuration so an AI agent can evaluate code inside any of them.
The point is reproducibility. A hand-assembled engineering box exists only on the machine it was assembled on. A Basilisk is a file, so the same environment comes up on a laptop, on a rented server, or on fifty of them, and a colleague gets it by cloning a repository. It is infrastructure as code aimed at a target most such tooling was not built for: a live image a human and an agent share.
A ship holds station through a watch change: the complement turns over, the hull does not move. An entire crew can be relieved in place and it is the same ship afterward. When the galaxy itself goes down to be rebuilt, that is a yard period, and the crew are either lost or reassigned.
At two in the morning, "the Pilot is down" is the whole report: what stopped, and what it costs you until it is back. A crew member who dies gracefully can be freeze-dried before final death and reanimated later by a Medic — an unusual ceremony, but one the fleet keeps a word for, because it happens.
Restarting a container leaves the stack in place. Recreating the whole set leaves the host in place. Rebuilding the host is the only event that takes everything with it. The three are worth telling apart, because they lose different amounts of state and only the last one loses the images.
Containers are named for the job they do — captain, pilot, medic, jr-eng-human — not for the image standing it. An alert at two in the morning names a role, which tells you what stopped and what it costs you, and the role survives swapping the image underneath it. A Lisp image can also be dumped to disk and brought back later with its state intact.
Clone the yard: one incantation grows the hull and musters a crew. What the roster names is drawn as needed, the channel to every post is opened for you, and the muster prints who came aboard and on which ports.
Clone the repository and start the stack. Images are pulled as needed, MCP client configuration is generated for you, and startup prints the container manifest with the ports each one actually publishes.
The repository lives at github.com/gornskew/basilisk — clone it, file issues, send pull requests.
A Basilisk-class ship carries a Captain by default, and takes on whatever else the roster names. Each post is a job, and a species stands it. Every post is discoverable by the others over HTTP, SLIME/Swank and MCP from the moment it comes up.
A package-rich, native-compiled GNU Emacs, and the oldest-sounding species in the fleet; its kit also carries Node.js and several terminal AI CLIs. The longest-lived hand aboard — it outlives the others' watch changes, and has opinions about all of them. Territorial, indifferent to ceremony, and in possession of a great deal of undocumented institutional memory. Stand your own watch in it, or leave it on the bridge for your agents while you work in the editor you already prefer.
skewed-emacs on GitHub →The open-source Gendl kernel, standing two engineering watches: one on Clozure CL and one on SBCL. They carry compilers, which is exactly what makes them Engineers — they can design a ship from inside one. Discursive, delighted by a hard problem, and prone to rebuilding something that already worked because it could be more elegant.
The Gendl kernel, at Genworks →A ship may also take on a Guild detachment: commissioned units of the Genworks GDL species, credentialed to standards set by an authority that is not this yard. Formal, capable, and eager to one-up the ship's own Engineers. They are licensed by Genworks, not by Gornskew — a different house entirely, and the roster says so.
Genworks GDL, licensed at Genworks →Cyclops at the helm and Eyes Only on the board stand those watches as drones: unmanned, no compiler aboard, each built to run one system rather than to develop new ones. The yard and the rest of the crew are free; the drones are what Gornskew sells. A ship comes up without either, and you can route by hand with docker ports if you would rather.
Cyclops and Eyes Only →A default stack is an Emacs daemon, two Gendl engines and a watchdog, with a reverse proxy in front if you want one. Which containers a given machine runs is declared in a file, not discovered by reading its history. Each one is reachable from the others over HTTP, SLIME/Swank and MCP from the moment it starts.
A containerized, package-rich, natively-compiled GNU Emacs configuration; the image also carries Node.js and several terminal AI CLIs. It is the longest-running process in the stack and survives restarts of the others. Use it as your editor, or run it headless as a service your agents drive while you work in your own.
skewed-emacs on GitHub →The open-source Gendl kernel, one container on Clozure CL and one on SBCL, so you can check behaviour against two implementations without a second machine. Both carry compilers: definitions can be changed in the running image, which is the entire reason for working this way.
The Gendl kernel, at Genworks →Licensed users add Genworks GDL images on Allegro CL, in SMP and non-SMP Enterprise variants, by dropping a supplemental repository alongside the clone. These are Genworks products, licensed by Genworks and priced separately from anything Gornskew sells.
Genworks GDL, licensed at Genworks →Cyclops ($99) fronts HTTP and Eyes Only ($69) runs the status board. Both ship as runtime binaries with no compiler: they run the one system they were built for. These two are what Gornskew sells; the repository and everything else in the stack are free and AGPL. The stack comes up without either — publish docker ports by hand instead.
Cyclops and Eyes Only →A post is a job somebody has to stand. It is how you tell, at a glance and at two in the morning, which part of the ship stopped answering.
Pilot and Comm are roles, not robots, and the species standing a role can vary. Load Cyclops into a Genworks GDL Engineer and it could stand in for the Pilot — a Pilot of an unusual species, carrying a compiler of its own; a person doing that job would carry one too, the kind that looks like a slide rule in the shirt pocket. What Gornskew sells for those two watches are drones instead: unmanned, no compiler aboard, built to run one system rather than to develop new ones. A compiler is a seat and a drone is a watch, which is why they are priced differently — the yard and the rest of the crew are free, and the drones are what we sell.
Container names are job names, not image names, and the two are deliberately decoupled: the image standing a given job can be swapped without renaming anything that refers to it.
The job and the image that fills it are separate facts, and so is whether that image carries a compiler. Cyclops and Eyes Only are runtime binaries and carry none, which is what makes them a deployment rather than a seat and is why they are priced the way they are — $99 and $69, per host, perpetual. Any image can be pointed at any job: load Cyclops into a Genworks GDL container and it will front HTTP perfectly well, with a compiler along for the ride. That is a licensing distinction as much as an architectural one.
Every post above answers on the same channel, and the channel is not itself a member of the crew. lisply-mcp is that subspace layer, the middleware every hail passes through, so Cursor, VS Code + Copilot, Claude, Gemini, Codex or any other MCP-capable agent can evaluate code aboard. A post's REPL becomes a general-purpose API, driven through symbolic expressions.
The channel is opened when a ship comes up, to every post on the roster at once — which is why that wiring belongs to the yard rather than to any one crew member.
Every container above answers on the same protocol, and that layer is not itself one of them. lisply-mcp is thin Model Context Protocol middleware connecting AI agents to Lisply-speaking backends, so Cursor, VS Code + Copilot, Claude, Gemini, Codex or any other MCP-capable agent can evaluate code in the running image. The REPL becomes a general-purpose API, called with symbolic expressions rather than a hand-written tool schema per operation.
Client configuration is written at startup and covers every container the machine declares, in one pass — which is why that wiring belongs to the repository rather than to any individual service.
No two ships need be alike, and none of them are altered. A vessel's particulars arrive as a roster — you do not modify a Basilisk to get a different Basilisk, you write down a different complement and the yard lays that one down instead.
Common complements have names, so a ship can be described in a word: a standard complement, a piloted one, or a guild ship carrying the commissioned detachment. A roster matching none of them musters anyway and reports as custom — an outcome, not an error, or the words would stop describing ships we actually build.
Several ships can fly in the same galaxy, each on its own heading, and every post keeps its canonical name aboard its own ship. What an agent hails does not change when a second vessel comes up alongside.
Other yards are welcome to lay down Basilisk-compatible hulls and sell the fittings. The fitting catalogue is a public contract, not a private convenience.
Machines differ, and none of them differ by local modification. What a given machine runs is declared in its own small overlay repository, which installs into the Basilisk clone. You do not edit Basilisk to get a different Basilisk; you write down a different set of services and generate that one instead.
Common sets are named, so a machine can be described in a word: standard is the Emacs daemon, the two engines and the watchdog; piloted adds the Cyclops proxy; guild adds the licensed Genworks GDL pair. A declaration matching none of them still works and reports as custom — a supported outcome rather than an error, since real machines routinely are one.
Several stacks can share one host, each with its own container name prefix and port offset. Hostnames inside each Docker network stay canonical, so what an agent connects to does not change when a second stack comes up beside the first.
Third parties are welcome to build Basilisk-compatible images and sell the fittings for them. The fitting catalogue is a published contract, not an internal convenience.