Fred Oliveira86 downloadsExamine a note through thinking lenses — challenge, steelman, or concretize an idea with Claude, in a side panel.
An Obsidian plugin for thinking about a note through different lenses. Point it at an atomic note (or a text selection) and ask an LLM to Challenge, Steelman, or Concretize the idea. You can also add your own lenses. Results stream into a side panel where you can save a result as its own linked note.
<Lens> of <Note>.md, linked back to the
source and tagged #lens/<lens>.Beyond Anthropic, Lens can talk to any OpenAI-compatible chat API - hosted
services like OpenAI, OpenRouter, Groq, or DeepSeek, and local servers like
Ollama and LM Studio. Pick OpenAI-compatible as the Provider, then set the
Base URL, Model, and (for hosted services) an API key.
Note: These providers return the whole response at once rather than streaming it token-by-token. That's a platform limitation, not a bug: Anthropic can stream directly from Obsidian, but other endpoints are reached through Obsidian's request layer, which doesn't stream.
http://localhost:1234/v1No CORS or network setup is needed — Lens reaches local servers through Obsidian's own request layer.
Reasoning models: if a reply comes back empty, the model likely spent the whole token budget thinking before answering. Raise Max response tokens in settings.
ollama pull llama3.1.http://localhost:11434/v1llama3.1When you apply a lens, Lens sends the active note's content to your configured provider's API. If "Include linked notes" is on (the default), it also sends the text of the notes the active note links to.
api.anthropic.com for Anthropic, or the base URL you
set for an OpenAI-compatible provider. The plugin has no server and no
telemetry; nothing is sent anywhere else.Hosted providers charge a small amount per run on your key (cheaper on smaller models); local models are free.
Settings → Lens → Perspectives. Each lens has a name, a one-line description, and a prompt. Add lens creates one; the pencil edits and the trash removes. The Shared instructions field is prepended to every lens, so a lens prompt only needs to describe its own angle. Use the restore button to bring back the three defaults. (New or renamed lenses get their command-palette entry after a reload.)
Releases are cut by pushing a version tag. A GitHub Actions workflow
(.github/workflows/release.yml) then builds
the plugin, attaches main.js, manifest.json, and styles.css to the
release, and attests their build provenance.
Bump version in both manifest.json and package.json.
Add the new version to versions.json, mapping it to the minimum Obsidian
version it requires (e.g. "0.3.0": "1.13.0").
Commit it (chore: release 0.3.0).
Tag with the bare version — no v prefix — and push the tag:
git tag 0.3.0
git push origin main 0.3.0
The workflow creates the GitHub release with the built assets. Don't create the release by hand — pushing the tag triggers it.
Users can verify a downloaded asset's provenance with, e.g.,
gh attestation verify main.js --repo fredoliveira/obsidian-lens.