Graph Chat

by Muhammad Hamza
5
4
3
2
1
Score: 50/100

Description

Inspired from Bonscape; its a plugin that lets you chat with your notes, attached chats to different notes for context and much more.

Reviews

No reviews yet.

Stats

2
stars
45
downloads
0
forks
15
days
7
days
7
days
0
total PRs
0
open PRs
0
closed PRs
0
merged PRs
0
total issues
0
open issues
0
closed issues
42
commits

Latest Version

7 days ago

Changelog

Find any note without hunting for it

A big vault makes a big canvas, and past a few hundred nodes the only way to reach a note was to remember roughly where you had dragged it. This release adds a search bar to the top-right corner of the canvas.

🔍 Search and go-to

Type three characters and the five closest note titles appear beneath the bar. Tap one — or press Enter — and the canvas flies onto that node and lights it up.

It never filters or hides anything. The graph you arranged stays exactly as you left it; the viewport just moves.

Ranking comes from Obsidian's own fuzzy matcher, so results are ordered the way the quick switcher orders them, and the matched letters are highlighted as you type. Notes, tags and saved chats are all searchable, each with its own icon.

➕ Open a chat straight from a result

Every note result carries a +, the same symbol that starts a chat anywhere else on the canvas. Hit it (or Shift+Enter) and you land on the note with a fresh chat box already open on it — two steps collapsed into one keystroke.

🗂️ Narrow it to a folder

The folder button beside the field scopes the search to a single top-level folder, or leaves it across all of them. Subfolders come along with their parent, so a folder's own Chats/ stays inside its scope.

⌨️ Keyboard throughout

Key Does
↑ ↓ move through results
Enter go to the note
Shift+Enter go there and open a chat
Esc clear, then close

There is also a new command, Graph Chat: Search the canvas, so you can bind whatever hotkey you like to it — it reveals the view and drops the cursor in the field.

⚡ Built to stay out of the way

Nothing runs below three characters, and there is a short debounce above it. The panel is isolated from the canvas's render loop, so dragging nodes around costs exactly as much as it did before this feature existed.


Install: drop main.js, manifest.json and styles.css into <vault>/.obsidian/plugins/graph-chat/, then reload the plugin.

Full changelog: https://github.com/mhmzdev/obsidian-graph-chat/compare/1.1.2...1.2.0

README file from

Github

Graph Chat

An extended graph view for Obsidian where your notes open into AI chat boxes — powered by the Claude Code CLI you already have.

Obsidian's graph view lets you see your knowledge. Graph Chat lets you talk to it: click a note, ask a question, branch the conversation, and watch your graph grow — because every chat is a real markdown note in your vault, linked to the note it came from.

⚠️ Requires the Claude Code CLI installed and authenticated on your machine. The plugin spawns it locally against your vault — no API keys, no separate billing, and it inherits your vault's CLAUDE.md, skills, and instructions. Support for other CLIs (Codex, Gemini, GLM, …) is planned for a future version.

Showcase

Your notes as an interactive canvas — pan, zoom, arrange; positions persist.

Notes view

Chat with any note — the AI reads the note and its whole graph neighborhood, right on the canvas.

Chat view

Branch conversations — each branch remembers everything up to the branch point, then diverges. Try the same question across different models, side by side.

Branch view

Semantic zoom — zoom out and the vault collapses into folder cards; drag one to move its whole cluster.

Folder view

What it does

  • 🗺️ Graph canvas — your vault's notes, tags, and links rendered as an interactive canvas (force-layouted, positions persist once you arrange them).
  • 💬 Chat from any note — hover a note and hit + to open a chat anchored to it. Claude reads the note and knows its whole graph neighborhood — outgoing links and backlinks — loading whichever neighbors the question needs.
  • 🌿 Branching conversations — hit + on a chat box to branch it: the new session remembers everything up to the branch point, then diverges. Probe the same point with different models side by side.
  • 📝 Chats are real notes — every thread saves as markdown with a Source: wikilink, so conversations appear in the native graph too, get AI-generated titles, and can be tagged, linked, searched, and read like any other note. By default each folder keeps its chats in its own Chats/ subfolder.
  • 🔗 The canvas is writable — drag a + onto another note to create a real [[wikilink]] (into the Tags: line), onto a tag to tag it, onto a chat to share that note's context with the conversation. Select an edge and press Delete to unlink. Everything you'd do by typing, done spatially.
  • 🧠 Shared context, multiple sources — link several notes into one chat and it becomes a common conversation across all of them.
  • 🔍 Search and go-to — a search bar in the top-right corner: type three characters, get the five closest notes, and tap one to fly the canvas onto it. Hit the + on a result to land there and open a chat in one move. Narrow it to a single folder when the vault gets big. Bind a hotkey to it under Graph Chat: Search the canvas.
  • 🗂️ Semantic zoom — zoom out and the canvas collapses into folder cards with aggregated edges; drag a folder card to move its whole cluster; click to dive back in.
  • 🎛️ Model picker per chat — Sonnet / Opus / Haiku / anything your Claude plan supports, switchable mid-conversation. Configurable in settings.
  • 🔒 Read-only AI — the spawned CLI gets Read/Glob/Grep only. It can never modify your notes. The only writes are the chat notes the plugin itself saves, and the links you explicitly drag.

Install

Manual (until it's in the community store):

  1. Download main.js, manifest.json, and styles.css from the latest release.
  2. Create the folder <your vault>/.obsidian/plugins/graph-chat/ and drop the three files in.
  3. Reload Obsidian → Settings → Community plugins → enable Graph Chat.

Via BRAT: add mhmzdev/obsidian-graph-chat as a beta plugin.

Then: open plugin settings and set your Claude CLI path (run which claude in a terminal — e.g. /Users/you/.local/bin/claude).

Settings

Setting What it does
Claude CLI path Absolute path to the claude binary
Default chats folder Fallback storage for chat notes
Per-folder chats Each folder keeps chats in its own <folder>/Chats (toggle per folder)
Chat folder routing Explicit rules: notes under folder X store chats in folder Y
Models Toggle the models offered in the chat dropdown; add custom ids
Included folders All folders, or a checklist of the ones you want on the canvas

How it works

The plugin registers a custom view built on React Flow and runs headless claude -p sessions (--output-format stream-json) with your vault as the working directory. Conversations continue via --resume, branches via --fork-session. Chat titles come from a one-shot Haiku call after the first exchange.

Your notes never leave your machine except through your own Claude CLI, under your own account, with read-only tools.

Credits

  • Bonscape — the branching-conversations-on-a-canvas experience that inspired this plugin. If you want that idea as a polished standalone product, go look at what they've built.
  • React Flow (xyflow) for the canvas engine.
  • Obsidian for being the kind of app you can build this on.

Roadmap

  • Provider adapters: Codex CLI, Gemini CLI, GLM, and other local CLIs
  • Promote a co-source note to primary
  • Mobile-friendly fallback view

Development

npm install
npm run dev              # watch build
OBSIDIAN_VAULT="/path/to/vault" npm run deploy   # build + copy into your vault

# releasing (bumps package.json + manifest.json + versions.json, tags,
# pushes — the GitHub Action then builds and drafts the release):
npm run publish:patch    # 1.0.0 -> 1.0.1
npm run publish:minor    # 1.0.0 -> 1.1.0
npm run publish:major    # 1.0.0 -> 2.0.0

For an exact version: npm version 1.2.3 && git push && git push --tags.

License

MIT