Skip to content

Repository files navigation

✦ Curiosity

Highlight anything on the web, ask AI about it, and watch a knowledge graph grow in your Obsidian vault.

Curiosity is a local-first Chrome extension for people who read seriously. Select text on any page — or right-click any image — and ask your own LLM about it without leaving the page. Save the exchange and it becomes a permanent, linked markdown note: the quote, the source, your full Q&A, and topics as real [[wikilinks]] that cluster in Obsidian's graph view.

(formerly Highlight Scholar)

Curiosity chat panel streaming an answer about a highlighted passage

Why

Reading and research are usually separate acts — you read in one place, take notes in another, and lose the connection between them. Curiosity collapses the loop: ask while you read, save what mattered, and let the graph accumulate. Everything is yours: your API key, your vault, your machine. No accounts, no middleman servers, no telemetry.

Features

  • ✦ Ask anywhere — select text on any page and a small button appears; the chat panel opens with the highlight, page title, and URL preloaded as context
  • Streaming answers with markdown rendering (bold, lists, code, links), a Stop button, and per-answer Copy
  • Images too — right-click any image ("Ask Curiosity about this image"); vision-capable models actually see charts, diagrams, and screenshots, and saved images are downloaded into your vault's attachments/ folder and embedded in the note
  • Pluggable LLM — Claude (Anthropic), OpenAI, or Ollama for a fully local, private setup
  • Topics as wikilinks — type your own, click Suggest, or leave blank for auto-tagging on save; topic hub notes are created so Obsidian's graph view forms real clusters
  • Link highlights together — connect a new highlight to previous ones at save time
  • Revisit badge — return to a page you've highlighted and a pill offers to scroll you back to each passage (or image) and flash it
  • Find anything again — searchable toolbar popup (highlights, questions, topics, sources), plus an auto-maintained _Highlights Index.md in your vault

Saved note confirmation with topics and the revisit badge

Setup

Three pieces: the extension, Obsidian, and an LLM provider. ~10 minutes total.

1. Install the extension

Until it's on the Chrome Web Store:

  1. Download this repo (or git clone it) and unzip
  2. Open Chrome → chrome://extensions
  3. Toggle on Developer mode (top right)
  4. Click Load unpacked → select the repo folder
  5. Pin Curiosity to your toolbar (puzzle-piece icon → 📌)

2. Connect Obsidian

Curiosity writes notes through Obsidian's community Local REST API plugin — your notes never leave your machine.

  1. In Obsidian: Settings → Community plugins → Browse → install and enable Local REST API
  2. In that plugin's settings: enable the non-encrypted (HTTP) server (default port 27123 — it only listens on localhost)
  3. Copy the plugin's API key
  4. In Curiosity's settings (right-click the ✦ icon → Options): paste the key, confirm the URL http://127.0.0.1:27123, and pick a vault folder (default Highlights)
  5. Click Test Obsidian connection → green check. Obsidian must be running when you save.

3. Pick your LLM

In Curiosity's settings, choose one:

Provider Setup Notes
Claude (Anthropic) API key from console.anthropic.com Default model claude-sonnet-4-5; vision works out of the box
OpenAI API key from platform.openai.com Default model gpt-4o; vision works out of the box
Ollama (fully local) Install Ollama, ollama pull llama3.1 100% private. For images, pull a vision model (llava, llama3.2-vision). If requests are rejected, start Ollama with OLLAMA_ORIGINS=chrome-extension://*

Your API keys are stored in Chrome's local extension storage on your device and are sent only to the provider you chose. See the privacy policy.

Try it

Open any article, select a sentence, hit ✦ Ask, ask a question, then Save to Obsidian. Open your vault's graph view and say hello to your first cluster.

Asking about a chart image

The note format

One note per highlight, Zettelkasten-style, with frontmatter that Dataview, Smart Connections, and Copilot can build on:

---
title: "US crude inventories fell by 4.2 million barrels"
source: "https://example.com/article"
page: "Oil Markets Weekly"
created: 2026-07-23T18:40:00.000Z
model: "claude-sonnet-4-5"
topics: ["Oil Markets", "Crude Inventories"]
related: ["[[Previous highlight note]]"]
type: highlight
---

> [!quote] Highlight
> US crude inventories fell by 4.2 million barrels…
[Oil Markets Weekly](https://example.com/article)

## Conversation

**Q:** Why do inventory draws move prices so much?

**A:**## Topics

[[Oil Markets]] · [[Crude Inventories]]

Image saves use type: image-highlight, embed the image with ![[...]], and record the attachment path in an image: field.

Troubleshooting

  • Stuck or no response? If you just updated/reloaded the extension, refresh the tab — Chrome keeps an orphaned copy of the old content script in already-open tabs (Curiosity detects this and tells you). Any stalled request errors out after 60 seconds with a real message.
  • Save fails: Obsidian must be open, with Local REST API enabled and the key/URL matching settings. Use Test Obsidian connection.
  • Button doesn't appear: some restrictive pages (Google Docs, certain PDF viewers) handle selection specially; standard articles and docs work.
  • Ollama rejects requests: launch it with OLLAMA_ORIGINS=chrome-extension://*.

Development

No build step, no dependencies — edit and reload.

manifest.json    MV3 manifest
background.js    service worker: LLM streaming, topics, image encode, Obsidian writes
content.js       selection button, shadow-DOM chat panel, markdown renderer, revisit badge
popup.*          toolbar popup (search)
options.*        settings page
store-assets/    Chrome Web Store listing kit (icons, screenshots, submission guide)

After code changes: ↻ the extension at chrome://extensions, then refresh test tabs. See CONTRIBUTING.md for ground rules (spoiler: no remote code, no innerHTML for model output, local-first forever).

Privacy

Local-first by design: no analytics, no tracking, no developer servers. The only network traffic is the direct call to the LLM provider you configured and to Obsidian on localhost. Full policy: store-assets/privacy-policy.html.

Roadmap

  • "What do I know about X?" — answer questions from your own vault, with links to your notes
  • Streaming polish, more providers, Firefox port

License

MIT © 2026 Jean-Paul Faraj

Not affiliated with Obsidian, Anthropic, OpenAI, or Ollama.

About

Highlight anything and research simply, all without leaving the page you're on. Then save your findings to obsidian.

Resources

Contributing

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages