Plugin: Local-Sidekick - local LLM agent IDE-style sidebar chat with Ollama and Pi agent harness

Plugin/Theme Disclaimer

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


GitHub Repo: obsidian-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.

1 Like

Please fix the link to the Community Directory in the Disclaimer section. It points nowhere.

If you can’t, I can take care of it. Thanks!

Sorry I can’t edit it (or include the link in this reply)

Mark is as inline code or in a code block

```
[forum](https://forum.obsidian.md)
```

and I’ll take care of it.

edit: this one here, yeah? https://community.obsidian.md/plugins/local-sidekick

that’s the one, thank you!

The link in the disclaimer is updated and looks good to go.

1 Like

thanks!

NEW RELEASE v0.1.8

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.

  • Starter Sidekick folder structure.
    Sidekick can generate useful vault-native configuration files under:

    • Sidekick/Agents/
    • Sidekick/Memory/
    • Sidekick/Prompts/
  • 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.

1 Like

MAJOR RELEASE v1.0.0

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:

---
name: writing-editor
tools: read-only
include:
  - Writing/Style Guide.md
  - Writing/Project Brief.md
---

text....

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.

@ki-produktiv-de - and sorry for the delayed reply!