Obsypi is a desktop-first Obsidian sidebar copilot that combines a native right-sidebar chat UI with a local plugin-owned vault tool layer and an internal pi helper runtime.
The current MVP targets:
- a native Obsidian
ItemViewin the right sidebar - OpenCode Go as the first supported model provider
- plugin-owned vault reads, writes, moves, renames, and trash actions
- guarded
.obsypi/session storage and mutation journaling
- Opens a dedicated
Obsypisidebar from the ribbon oropen-panelcommand - Stores provider settings in plugin data, not in your vault
- Streams assistant responses into the sidebar timeline
- Routes tool calls back through Obsidian APIs for vault-safe operations
- Persists internal state under
.obsypi/for transcripts, sessions, and audit logs
This repository contains an active MVP implementation and a research/planning corpus for the next iterations.
Relevant docs:
- docs/README.md for the research hub
- docs/DECISIONS.md for accepted architecture defaults
- docs/SOURCE_INDEX.md for pinned references
- CONTRIBUTING.md for contributor workflow notes
Requirements:
- Node.js 20+
- npm
- Obsidian desktop 1.7.2+
Install and run:
npm install
npm run devBuild and test:
npm run build
npm test
npm run lintFor local development, symlink the repo into a dev vault at:
<vault>/.obsidian/plugins/obsypi
That lets npm run dev rebuild directly into the live plugin directory while Obsidian is open.
- Run
npm run dev. - Open your dev vault in Obsidian.
- Enable
obsypiin Settings → Community plugins. - Open the sidebar with the ribbon icon or
Open Obsypi sidebar. - Configure the OpenCode Go API key and model in the Obsypi settings tab.
- Send a prompt and verify sidebar streaming, tool summaries, and
.obsypi/persistence.
src/
main.ts Plugin lifecycle and commands
settings.ts Persisted plugin settings and settings UI
runtime/ Helper process bridge and controller
ui/ Sidebar view
vault/ Guarded vault tools and path normalization
persistence/ .obsypi session and journal storage
helper/
src/ Internal Node helper runtime
shared/
protocol.ts Typed JSONL protocol between plugin and helper
docs/
research/ Architecture and MVP research notes
- Obsypi is designed to keep vault mutations inside the plugin through Obsidian APIs.
- API keys are stored in plugin data only.
- Reserved roots such as
.obsidian/,.trash/, and.obsypi/are blocked from general tool access. - Mutation attempts and successes are journaled under
.obsypi/.
Obsidian community plugin releases need these top-level assets attached to the GitHub release:
manifest.jsonmain.jsstyles.css
The version in manifest.json must match the Git tag exactly, without a leading v.
Licensed under the 0BSD license. See LICENSE.