zaemyung27 downloadsYunseul - sparkling ripples of clarity across your Obsidian vault. Chat with your notes using LM Studio or Claude Code.
Yunseul (윤슬) — Korean for sparkling ripples on the water. Where your notes catch the light: brilliant insights amidst a chaotic web of notes.
Chat with your Obsidian vault using a local OpenAI-compatible LLM server (LM Studio, Ollama, llama.cpp server, vLLM, LocalAI) or the Claude Code CLI.
Status: Pre-1.0 — actively developed; expect breaking changes between versions.
claude CLI subprocess.claude not on PATH, etc.) and how to fix it.Yunseul ships two backends. The active one is selected under Settings → Yunseul → Provider.
Talks to any server that implements the OpenAI /chat/completions SSE protocol — LM Studio, Ollama, llama.cpp server, vLLM, LocalAI. Configure the base URL, API key (if your server requires one), and the model id in Settings → Yunseul. Everything runs on your machine: prompts, vault excerpts, and retrieved chunks never leave the host.
Spawns the local claude CLI binary. Yunseul does NOT manage an API key for this provider; it rides on your existing Claude Code authentication (Pro/Max OAuth, Anthropic Console, Bedrock, Vertex, etc.) as configured in your Claude Code install. Configure the binary path (optional — defaults to claude on PATH) and model in Settings → Yunseul → Provider: Claude Code subprocess. Writes (Edit/Write tools) are off by default; toggle "Allow writes" to let the assistant modify vault files.
claude CLI. See Anthropic's privacy policy: https://www.anthropic.com/legal/privacy<vault>/.yunseul/bm25-index.json. It is never uploaded by Yunseul itself; any sync service watching the vault will see it (see "Sync services" below).<vault>/.obsidian/plugins/yunseul/sessions/<id>.json.<vault>/.obsidian/plugins/yunseul/data.json (Obsidian's standard plugin data location).data: URIs, Obsidian ![[embed]] syntax, and unsafe link schemes are rewritten as bracketed placeholder text (e.g., [blocked external image: host], [blocked data image], [embed stripped: target]). This applies to both Append-to-note and Download-as-Markdown paths, is independent of the in-chat "Allow external images" toggle, and cannot currently be disabled.main.js, manifest.json, and styles.css from the latest release.<vault>/.obsidian/plugins/yunseul/ and drop the three files into it.When the "Enable vault search" toggle is on, Yunseul builds a BM25 inverted index over every markdown file in your vault. The index lives at:
<vault>/.yunseul/bm25-index.json
Notes on this file:
.obsidian/) so it survives plugin reinstall.*.tmp sibling + rename) whenever an indexed note changes. The debounce window is 1.5 seconds.The index file lives under the vault root, so anything that watches the vault will see and potentially sync it. To exclude it:
.) by default, which covers .yunseul/. Verify in your sync settings..nosync to the directory to opt out: rename .yunseul to .yunseul.nosync. Note this requires updating the path in the plugin code..yunseul/ to the folder's .stignore file..yunseul/ to your vault's .gitignore.To remove the on-disk index, either:
Both routes show a confirmation modal before deleting the file.
See CONTRIBUTING.md for dev setup, code conventions, architecture overview, and how to add a provider or setting.
Yunseul is built with care, in spare hours, by one person — alongside other small things that try to make a few minutes of someone's day a little brighter. If it's been useful to you, a coffee keeps the next small bright thing alive.
More small things at zaemyung.github.io.
MIT. See LICENSE.