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.