Why Loom?

The motivation behind Loom is simple. AI-assisted engineering relies on natural language as a primary medium for building software. Literate programming has been doing that since 1984.

The motivation

The modern problem

AI-assisted engineering relies on natural language as a primary medium for building software. But the prose describing a system and the code that implements it tend to drift apart and fight for authority. The result is a split brain: the prose on one side, the code on the other.

Loom applies literate programming principles to address this and the deeper problems behind it. It treats prose and code as equal constituents of a single program. We write prose beside each code chunk, defining what it does and why.

Keeping intent in the program itself matters most when writing code with AI. The agent reads the prose alongside the code it is changing. Prose and code stay in sync because they live together and change together.

The state of the art is the other reason for Loom. Literate programming has never come with the tooling modern development takes for granted, and every earlier attempt shows the same pattern: tangling that works for any language, with a full language server behind it, has never come together outside an experiment. Loom brings the two together.

ProblemSolution
Specs and code drift. Sync machinery becomes a system within a system.
Prose and code stay in sync because they live together and change together.
AI code generation is approximate, never deterministic. The same prose interpreted twice gives two different programs.
You edit the source directly, with its prose beside it. Every change is an ordinary change to the source, never a re-roll of the generator.
In large codebases, prose can no longer be traced to its code, and the same ground gets covered again in new chapters.
Every passage sits beside the code it describes, and the table of contents is generated from the chapters themselves.
Natural language does not follow the order a compiler demands.
With Loom you write a program in the order you reason about it, and tangling puts each piece where the compiler wants it.
A program is a graph of files and modules pointing at one another, with no clear place to start reading.
A Loom project can grow into a book. Parts and chapters read top to bottom, under a table of contents generated from the chapters themselves.
Adopting a new format usually means converting a whole codebase before any of it pays off.
Loom can host one file at a time. The rest of the codebase stays as it is until you choose to move it.
Specs end up scattered across the codebase, with no shape of the whole.
Loom gives the corpus a shape of parts and chapters, so every chapter has a place.
Literate programming tools understand no language, so the document gets no completion, no diagnostics, no go-to-definition.
Loom gives every supported language a real language server.