Obsidian plugin. You ask questions about your notes. Answers use retrieved notes and list sources.
The plugin uses your OpenRouter API key. There is no paywall and no extra vendor cloud.
See ROADMAP.md. To contribute, see CONTRIBUTING.md.
- Obsidian desktop (1.8.0+)
- An OpenRouter API key
Node.js is only required for development or building from source.
- Open Releases.
- Download the latest release assets:
main.js,manifest.json,styles.css. - Create a folder in your vault:
YourVault/.obsidian/plugins/grounded-chat/
- Copy the three files into that folder.
- Reload Obsidian (
Cmd+R/Ctrl+R). - Settings → Community plugins → turn off Restricted mode → enable Grounded Chat.
- Settings → Grounded Chat → set your API key and model.
The plugin is not in the Obsidian Community Plugin directory yet. Install manually from releases for now.
- Open chat from the ribbon or command palette (Open chat).
- Wait until the banner shows file and chunk counts.
- Ask a question. Sources appear under the answer. Click a source to open the note.
- Status badge on vault answers: GROUNDED, PARTIAL, or UNCERTAIN.
- Use Stop to cancel a stream.
- Optional: Save last answer to note command or the download icon on a reply.
- Optional: enable Persist chat in settings to keep the thread after reload.
- Optional: pick a Skill from the dropdown (loads
SKILL.mdfiles from.cursor/skills/in your vault). - Optional: attach a note, use an edit skill or an edit request (for example
improve the gist), then review the proposal card and click Apply to note. - Token usage shows per reply (↓ prompt · ↑ completion) and session total at the bottom when enabled in settings.
- Optional: command Rebuild index after you change exclude paths or update the plugin (search tokenization may change).
- Optional: New chat in the header or command Clear chat to reset the thread.
- Optional: command Apply last note proposal when a pending edit proposal exists.
- Reload Obsidian.
- Enable Grounded Chat and set an API key.
- Open chat. Banner should show file and chunk counts.
- Ask about a note you know exists. Pass: answer cites that note and the evidence link opens it.
- Ask a follow-up about the conversation ("what did I ask?"). Pass: no new vault search, label shows From conversation.
- Attach a note, run an edit skill, ask to improve the gist. Pass: proposal card appears with Apply to note; note updates only after Apply.
Clone this repository outside your vault. Obsidian loads the plugin through a symlink.
git clone https://github.com/antonimarek/grounded-chat.git
cd grounded-chat
npm installLink into your vault (once):
ln -sfn /path/to/grounded-chat \
/path/to/YourVault/.obsidian/plugins/grounded-chatBuild and watch:
npm run build
npm run devIn Obsidian: turn off Restricted mode, enable Grounded Chat, reload after changes.
Do not copy node_modules into the vault. Keep the git repo outside cloud sync when possible.
See CONTRIBUTING.md for pull requests and releases.
Place skills in your vault under .cursor/skills/<skill-id>/SKILL.md (folder configurable in settings). Each skill needs YAML frontmatter with name and description. Select a skill in the chat pane dropdown, type /skill-id/ in the input (Cursor-style), or @mention a note to ground the request. Autocomplete appears when you type / or @.
Examples:
/conversation-to-obsidian-note/— activate skill, then@mentiona note/conversation-to-obsidian-note/ re-gist this note— with a message@— autocomplete notes (active note first) and headings (@Note#Section)[[My Note#Section]] summarize the gist— inline wikilink attaches that note for one message
Type @ to open the mention menu. Picked notes appear as context chips above the input and as [[wikilinks]] in your message. Each send uses only the mentions in that message (no sticky attachment across turns).
Attached note content is sent to the model as the primary source. Vault search still runs when the skill or question needs related links.
- Chat sends the question, retrieved chunks, and conversation messages to OpenRouter.
- The index stays on the device (IndexedDB). It does not sync with the vault.
- Optional chat persistence stores the thread in plugin
data.jsonon this device only. - Keep
data.jsonsmall. Do not store the index there.
Do not commit machine-specific paths, vault names, or API keys.
MIT. See LICENSE.