Rabbitor

unlisted

by donjguido

AI-powered document annotation with per-highlight conversation threads, multi-provider AI, branching edits, and annotation linking.

Updated 1mo agoMIT
View on GitHub

Rabbitor for Obsidian

Go down the rabbit hole of knowledge. Highlight passages in your notes and have AI-powered conversations about them — with any provider, right inside Obsidian.

Rabbitor brings per-highlight conversation threads, multi-provider AI, and branching edits to your vault. Every thread lives next to the note it came from, exportable as markdown.

Status: pre-release (0.1.0). Submitted to the Obsidian community plugin store and currently under review (obsidianmd/obsidian-releases#12140). Install manually or via BRAT in the meantime (see below). Desktop-only for now — mobile has not been tested.

Rabbitor demo

Features

  • Highlight & annotate — Select any passage in a markdown note and attach a colored highlight with a conversation thread.
  • Multi-provider AI chat — Anthropic, OpenAI, Google Gemini, OpenRouter, Ollama, or any OpenAI-compatible endpoint. Bring your own keys; they stay on your machine.
  • Branching conversations — Fork from any message, regenerate alternate replies, keep the tree.
  • Document attachments — Drop PDFs or markdown notes into a thread as context. Capability warnings flag models that can't handle PDFs.
  • Markdown export — Export threads as plain markdown with branches and Obsidian embeds preserved.
  • Per-note storage — Highlights and threads live in a sidecar JSON, so your notes stay clean.

A note with highlights and the thread sidebar open

Installation

Manual (current)

  1. Download the latest main.js, manifest.json, and styles.css from Releases (or build from source — see below).
  2. Copy them to <your-vault>/.obsidian/plugins/rabbitor/.
  3. In Obsidian: Settings → Community plugins → Installed plugins → Enable Rabbitor.

BRAT (recommended for pre-release updates)

  1. Install the BRAT plugin.
  2. Add beta plugin: donjguido/rabbitor-for-obsidian.
  3. Enable Rabbitor in Community plugins.

Community store

Under review — see obsidianmd/obsidian-releases#12140.

Usage

  1. Open any markdown note.
  2. Select a passage → a tooltip appears → pick a color to create a highlight.
  3. Click the highlight (or open the right sidebar) to start a thread.
  4. Configure your AI provider in Settings → Rabbitor.

Selection color picker

Highlights, threads, and settings live in the right sidebar:

Sidebar tabs

Drop slash commands into any message to quickly pull in context or rerun common prompts:

Slash commands

Fork from any message to explore an alternate line of reasoning without losing the original:

Branching a conversation

Configuration

Rabbitor supports these AI providers out of the box:

ProviderRequiresNotes
AnthropicAPI keyClaude models
OpenAIAPI keyGPT family
Google GeminiAPI keyGemini family
OpenRouterAPI keyUnified endpoint for many models
OllamaLocal URLRun models locally
CustomURL + optional keyAny OpenAI-compatible endpoint

Keys are stored in Obsidian's plugin data directory on your machine. Rabbitor never phones home.

Provider settings

Threads export to plain markdown with branches and Obsidian embeds preserved:

Exported thread rendered in Obsidian

Development

npm install
npm run dev          # build with sourcemaps, watch mode
npm run build        # production build
npx tsc --noEmit     # type-check

# Build and copy into a local vault for testing:
npm run install-plugin -- --vault "C:/path/to/vault"

Project layout

src/main.ts       plugin entry (lifecycle, commands)
src/types.ts      shared interfaces
src/constants.ts  view IDs, colors, defaults
src/store/        annotation CRUD + debounced persistence
src/editor/       CM6 extensions (highlights, badges, selection tooltip)
src/views/        right-sidebar ItemView (Highlights / Threads / Settings)
src/settings/     PluginSettingTab
src/ai/           provider adapters
src/export/       markdown exporters

Obsidian loads three files: manifest.json, main.js, styles.css. esbuild bundles src/main.tsmain.js (CJS).

Contributing

Issues and pull requests welcome. Before opening a PR:

  • Run npx tsc --noEmit — must pass with no errors.
  • Follow the patterns in CLAUDE.md (Obsidian CSS variables, requestUrl vs fetch, sentence-case UI text, etc.).
  • New features should come with a short design note in docs/superpowers/specs/ if behavior is non-obvious.

License

MIT © donjguido

Related

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.