loom init

loom init sets a workspace up. It is the only command that asks questions, and it asks them once.

The directory defaults to the current one.

What it asks

The first question is the primary language — the language a section is written in when its heading does not say otherwise. It defaults to typescript.

The second is which languages to activate, as space-separated identifiers. Activating a language installs its editor services, so the language server can offer completion and diagnostics inside that language's sections. It defaults to whatever you answered first.

What it writes

file what it holds
.loom/config.yaml the primary language, the activated languages, corpus, the directory Loom reads, and an empty ignore list for looms the project leaves out
.loom/.gitignore ignores services/, so downloaded language services stay out of version control
.mcp.json lets an agent reach the workspace over the Model Context Protocol
.editorconfig a [*.loom] section whose max_line_length is the project's width, so your editor wraps a loom's prose where its code ends

It also creates the corpus directory the configuration names, if it isn't there yet.

.mcp.json and .editorconfig may hold settings of your own, and init keeps them. It adds its own entry to .mcp.json, and writes its .editorconfig section between two comment lines that mark it as Loom's. If your .editorconfig already has a [*.loom] section of yours, init leaves the file alone.

Running it twice

Init is safe to run again. If .loom/config.yaml already exists it asks nothing, keeps the configuration as it stands, and reports which file it found. So a project that already has a workspace can be re-initialised to pick up the agent and editor configuration without losing its language settings. Run it again after you change width in .loom/config.yaml, and it rewrites its .editorconfig section to match.

To change the languages afterwards, use loom add and loom remove rather than editing the file by hand.

Loom