LM Studio writes to file — Lmstud-Yo's first complete loop
Lmstud-Yo went from `init(project)` to `works(response)` in roughly three hours on the night of July 27–28, 2025. The first time a query went out to a locally-running LM Studio server, came back, and landed in an Obsidian note as actual text. Logged retrospectively from 2026.
Why Care?
If you've followed the local-LLM scene at all, you know the loop is not always smooth: get the model running locally (LM Studio handles that nicely), figure out the API surface (LM Studio exposes an OpenAI-compatible endpoint), get the request shape right, get the response streamed back, render it into the editor. Each step has its own failure mode.
This entry is the retrospective for the night that loop closed. After Lmstud-Yo, the team had a way to run inference locally — Granite, Phi-4, Gemma-3, Llama-3.2, custom models — without leaving Obsidian and without paying per-token to a hosted provider.
What's New?
(All historical, captured retrospectively. Full arc: 2025-07-27 23:48 → 2025-07-28 02:48.)
init(project): initialize lmstud-yo as a submodule within content farm(23:48) — repo created, manifest written, intent set.update(readme): update readme(00:08) — the readme got real before the code did.upgrade(dependencies): upgraded to latest dependencies(00:14) — pnpm cleanup pass.prerun(project): prerun of entire plugin(00:37) — everything compiles.pretest(plugin): build now error free, code typescript error free. about to run in obsidian.(01:20) — the moment of truth: about to load it for the first time. Obsidian doesn't care if your TypeScript compiles; it cares if your manifest is right and your runtime doesn't throw.progress(request): now the request is getting to LM Studio(02:13) — the wire is live. Plugin can speak to the local server.works(response): response now writes to file(02:48) — the round-trip is closed. Query → local LLM → response → Obsidian note.
The arc
This is one of the cleanest "build a working plugin in one sitting" arcs in the content-farm history. Three hours from init to works, in seven legible commits. No false starts visible in the log — the developer had a clear plan, executed it, and the things that needed to break broke fast.
The commit messages tell the story without embellishment. prerun → pretest → progress → works is the most honest English-language progression of plugin development we've shipped. Each milestone was real, each was logged at the moment it happened.
LM Studio's OpenAI-compatible endpoint did most of the heavy lifting on the wire. The plugin's job was the modal (which model, what temperature, what system prompt) and the response handling (where in the note to write the result, and how to format streaming chunks as they arrive).
What this enabled
Lmstud-Yo became the reference implementation for the local-LLM modal pattern in the farm. Its temperature slider, model dropdown with live taglines, system-prompt textarea, and Stream-Response toggle later became the template that Image-Gin and Perplexed adopted for their own modals.
It also unlocked the workflow path that doesn't exist in any hosted-only setup: experiment with a small local model first, iterate on the prompt, and only escalate to a hosted model (Perplexed for search-augmented, Image-Gin for image generation) when you actually need the larger context or the specialized capability. The local model is the cheap, fast first draft.
Retrospective notes
Written 2026-05-04, nine months after the working night.
The repo name
lmstud-yo— pronounced "L-M Stud, Yo" — is a joke that has aged about as gracefully as that kind of joke ages. The plugin works. The name stays.This was also the first plugin in the farm initialized as a submodule, not relocated into one later. That conventions-first instinct paid off when we did the big root-tidy in May 2026.