Is this project open source? Yes
Is this project completely free? Yes
Is this project vibe-coded beyond the author’s ability to comprehend how it works? Yes
Community Directory: Local Sidekick
Hey all, sharing a plugin I vibe-coded largely to meet personal needs for my offline travelling and LLM addiction. The idea is, coding IDE agent chat sidebars are great so why not have them in Obsidian, and better yet for local LLM agents for entirely offline Obsidian musings. So here it is, Local Sidekick
Local Sidekick
NOTE this is a early stage Minimal Viable Product (MVP). It’s essentially just a UI sidebar which neatly adopts standard Obsidian Markdown rendering and the user theme whilst displaying an agent chat just like VScode/copilot agent sidebar chats. It has recent chat sessions, vault file searching and referencing with @ symbol, minimal tool usage (restricted by default for safety but can be customised), pdf parsing, web search, chat export and reviewed file editing etc. In other words, most of what you’d expect from your equivalent coding agent IDE. It’s all wired through Ollama and the Pi agent harness for maximum customisability so you can max it with custom prompts and skills via Pi as much as you want.
Please crack at it, break it, criticise it and tell me what you think. If you have any feature requests / ideas, or are interested enough to review my mostly vibe-coded js code then holla! Meanwhile, I’ll keep updating it gradually and reporting back here.
Local Sidekick seamlessly uses your Obsidian theme for its UI, supporting dark and light mode. It can be launched from the command palette or from the small AI agent icon on the left toolbar. Doing so will open the interactive dashboard as a tab in the right hand sidebar. An agent status panel at the top of the sidebar gives real time information on the local models being used alongside interactive buttons to find local models. Below a new chat can be started from an interactive prompt box with model selection or a recent chat from session history continued.
Features
Local model workflow through Pi and Ollama.
Persistent chat sessions with a history landing page.
Compact model rail with discovered Pi/Ollama models and capability badges.
Markdown and math rendering through Obsidian’s renderer.
Vault file mentions with @, including Markdown, text-like files, attachments, and best-effort PDF text extraction.
Prompt context helpers:
@search(query) for local vault search.
@semantic(query) for lightweight related-note search.
@vault-index for filenames and top headings.
@links or @links(query) for conservative internal link suggestions.
@cmd(command) for exact allowlisted local commands.
@url(url) for optional HTTPS web fetch context from explicitly allowlisted hosts.
Reviewed Markdown edit proposals with visible diffs and approval before write.
Chat export to Markdown, defaulting to a Chats/ folder in the vault.
Obsidian command palette actions for opening the sidebar, exporting chats, checking Pi/Ollama, and suggesting internal links.
Chat session agent reply streams are rendered in markdown with your Obsidian theme, handling math and standard formatting. For a full Obsidian IDE experience, use the terminal plugin alongside this so you never have to leave Obsidian.
This new update focuses on the advantages of a local-first approach to agentic Obsidian. The idea is to keep bringing in features that maximise productivity by vault file - agent communication.
This release introduces the following features:
Vault-native agent profiles using .agent.md files.
You can now define reusable agents inside your vault, for example research tutors, writing editors, code reviewers, vault linkers, or glossary curators.
Agent profiles can include vault memory files, such as:
Sidekick/Memory/vault-summary.md
Sidekick/Memory/user-preferences.md
Sidekick/Memory/project-index.md
Sidekick/Memory/glossary.md
Per-agent model selection.
Agent files can list one or more preferred local models, and Sidekick lets you choose between them from the UI.
Per-agent tool preferences.
Agents can specify whether Pi tools should be disabled or use the safer read-only mode.
/agent selection from chat.
You can reference or switch Sidekick agent profiles directly while working.
Prompt library support.
Reusable prompt templates like custom system prompts can now live as Markdown files in your vault.
Project index generation
Sidekick can generate a lightweight index of Markdown filenames and top-level headings to help local models reason over the vault more reliably. In other words, it’s now super easy to generate a vault glossary.
Pi-compatible resource export.
Sidekick can export selected prompts and skills into a .pi/ structure, making it easier to bridge vault-native configuration with Pi’s agent harness.
Improved tool-use rendering.
Tool events now appear as expandable Tool used: <tool> cards in the chat stream.
Safer session folder handling.
Sidekick now prepares Pi session folders through Obsidian’s vault adapter rather than direct runtime filesystem access.
In this way and through further updates I’m pushing this plugin to be a bit more powerful than just an agent ACP/MCP and UI sidebar. A lot of this hinges off Pi being such a lightweight agent harness that we can do cool things like custom system prompts from Vault files.
This is the official post-development release. Experimental features are fully integrated, a UI refactor and many bug fixes included.
Defaults and safety
Pi’s tools now default to read-only (read, grep, find, ls), so it can search and open your notes on a fresh install. Writes, deletes, shell access and network access stay off.
Pi extensions, skills, prompt templates and context files remain off by default. Pi’s --tools flag only filters its built-in tools. extension-registered tools bypass it entirely, so keeping extensions off is what makes read-only mean anything. Turning them on is your choice to enable custom Pi extensions.
Chat
Queue a prompt while a reply is still streaming.
Resend and Edit last controls.
Pin notes to a session: attached to every prompt, persisted with the session.
Enter sends, Shift+Enter newlines, Stop button in the composer.
Interface
New top bar: Config, Chats, model/profile picker, Start/Kill. Kill now actually unloads the model from Ollama.
Home page shows the 5 most recent chats; Chats lists everything.
Models you’ve pulled in Ollama but haven’t added to Pi’s models.json are flagged, and clicking one copies the entry to paste in instead of failing at set_model.
Only agent profiles compatible with the selected model are offered.
Streaming repaints just the message being written, so long chats no longer slow down.
Consecutive tool calls collapse into one row; per-phase chatter replaced by a single “Thinking…” line.
Icon buttons with tooltips, themed entirely from Obsidian’s own variables.
Fixes
Transcript stays where you scrolled it mid-reply; composer stays editable while streaming.
@-mentions match filenames containing spaces; blue inline file links restored.
Open dropdowns no longer push the composer off the bottom of the panel.
The .agent.md vault-native profiles in v0.1.8 are the most interesting part to me. Keeping agent context inside the vault itself — rather than in external config — makes the whole setup portable and version-controllable alongside your notes.
I’ve been doing something similar with Claude Code and a CLAUDE.md file in my vault root: persistent context that loads at every session, describing naming conventions, folder structure, tag system, active projects. The .agent.md approach takes that further with multiple specialized agents per vault, which is a natural next step.
Two things I’m curious about:
Can agent profiles reference other vault notes as dynamic context? (e.g., a writing editor that automatically loads notes from a specific folder)
How does @semantic search work under the hood — local vector embeddings, or something lighter?
Offline-first with Ollama is a strong differentiator. Will give it a try.
Thanks! Yes I think there’s real room for optimising local .md files in your obsidian for use with this plugin and local agents, particularly porting ones you use for claude/codex etc. to your obsidian and local models. I’m currently updating the plugin actively to better reproduce the more modern agent harness capabilities used by claude and codex for example I’m releasing v1.20 which establishes a proper agent tool execution loop which I’ve included file edits into so it’s more robust to user calls for file edits (less false positives and more true positives).
In answer to your questions:
Yes, profiles can include specific vault notes in the preamble, whose contents are loaded again for each prompt:
Currently, include accepts explicit file paths, not folders or globs. You can instruct an agent to inspect a folder using its read tools, but that is model-directed retrieval rather than guaranteed automatic loading. Includes are limited to eight files, with each truncated to 20,000 characters.
Semantic search may be a bit of an overclaim at the moment. It’s just local keyword-overlap scoring, not embeddings. No Ollama embedding calls or vector database are involved.
For @semantic(writing style), it:
Reads Markdown notes through Obsidian.
Tokenizes the query and each note’s filename, headings, tags, and contents.
Removes common stop words and scores matching tokens, giving longer tokens slightly more weight.
Adds the top ten matches, with headings, tags, and short excerpts, to the prompt.