← content-farm

Beta SearchAIEnhancement

perplexed

Research-augmented writing across four model surfaces, inside the editor you already use.

Twenty-two commands across Perplexity, Anthropic Claude, Perplexica / Vane, and LM Studio. Generate cited one-page articles. Enhance selections with live web context. Stream image markers into prose. Find on-domain screenshots for a passage. Fill whole folders of empty profile files from per-directory templates. Every system prompt, every placeholder, every template is editable in settings — your tone, not ours.

perplexed — banner

What using it feels like

⌘P apply directory template
  • Apply directory template to all files in folderperplexed
  • Generate one-page articleperplexed
  • Enhance selected text with Perplexityperplexed
  • Get related images for selected textperplexed
  • Find images for selectionperplexed
  • Ask Claudeperplexed
  • Ask Perplexica / Vaneperplexed
  • Ask LM Studioperplexed

What you can do

Six capabilities, one command palette

Each capability is one Cmd-P entry away. Streaming responses, inline citations, and frontmatter stamps are baked in across the lot. The full surface is twenty-two commands once you count service-status checks, URL-update commands, and the meta utilities — these six are the ones you'll reach for daily.

The headline paradigm

Directory templates

Fill empty profile files with researched content. One template per directory describes the entry shape; the plugin applies it across one file or a whole folder, streams responses to disk, and stamps run metadata to frontmatter.

  • ⌘P Apply directory template to current file
  • ⌘P Apply directory template to all files in folder
  • ⌘P Stop directory template batch
  • Streams to the file as Perplexity returns chunks — failures surface in seconds, not minutes.
  • [IMAGE N: …] markers swap to real embeds; fallback # Images section if the model misses.
  • # Sources footer in the canonical [N]: [Title](URL) form that cite-wide accepts.
  • cf_last_run + cf_last_run_model stamped to frontmatter so you can query for staleness.

Quick research

One-page article

Type a term, get a researched article streaming into the active note. Pick a model, set a recency window, toggle what comes back.

  • ⌘P Generate one-page article
  • Five-model picker: sonar-deep-research, sonar-pro, sonar-small, plus two Llama-3.1-Sonar-online sizes.
  • Recency filter (day / week / month / year) for fresh-only sources.
  • Per-run toggles: citations, images, related questions, streaming.
  • Two editable article templates — one for sonar-pro, one for sonar-deep-research.

Rewrite with live context

Enhance selected text

Highlight prose, run the command, get a streaming rewrite that blends your selection with live web research. Citations woven inline, not appended as a footer.

  • ⌘P Enhance selected text with Perplexity
  • Streams into the active note at the cursor — your selection becomes the rewrite seed.
  • Pre-filled prompt template is editable per-invocation and globally in settings.
  • sonar-pro by default; citations attached inline tied 1:1 to Perplexity search results.

Image markers in-stream

Get related images

Selected text in, Perplexity image search out — streamed as image markers into the active note at the cursor. Use it when you want visuals to land alongside the existing prose.

  • ⌘P Get related images for selected text
  • Built on Perplexity sonar-pro with return_images=true.
  • Image-references prompt is fully editable in settings.
  • Pairs naturally with Enhance selected text for a research-plus-visuals pass.

On-domain screenshots

Find images for passage

Highlight a passage, ask Perplexity for screenshots that visually illustrate it. Restricted to the entity's domain (frontmatter url) — no third-party stock imagery sneaking in.

  • ⌘P Find images for selection
  • Splits selection into numbered paragraphs, distributes images across paragraph boundaries.
  • Strict client-side rejection of off-domain images — better to surface "none found" than to insert noise.
  • Configurable max-images setting; falls back to even distribution if the model emits no placement markers.

Direct queries

Ask any model

A Cmd-P entry per provider for ad-hoc questions that don't need a template or a selection. Each modal exposes the controls that provider actually has.

  • ⌘P Ask Perplexity
  • ⌘P Ask Claude
  • ⌘P Ask Perplexica / Vane
  • ⌘P Ask LM Studio
  • Each provider modal carries its own knobs — see the Provider depth section below.
  • Service-status commands per provider for quick connectivity checks.
  • Update-URL commands for endpoint hot-swaps without touching settings.

The paradigm

Directory templates

A working Obsidian vault collects categories of files that share a shape — concepts, vocabulary, sources, tooling profiles. Filling them out one editor-callback at a time is untenable when you have hundreds or thousands. A directory template binds one prompt to a directory via a glob, then the runtime applies it across one file or a whole folder.

01

Template

A markdown file with frontmatter (applies-to-paths glob), a fenced cft config block (provider, model, return flags, system prompt with {{basename}} and {{frontmatter.tags}} tokens), and a heading skeleton that becomes the user prompt.

02

Commands

One command for the active file (glob-matched), one for a folder (with confirmation modal showing file count), and one to halt a running batch. Fill or append depending on whether the target has existing content.

03

Cleanup pipeline

After the stream ends: wrap <think> blocks, swap [IMAGE N: …] markers for real embeds (with a fallback section), strip unreplaced placeholders, emit the cite-wide-compatible sources footer, and stamp run metadata to frontmatter.

Four templates ship with the plugin

Auto-seeded into Content-Dev/Templates/ on first plugin load. The seeder is conservative — it only writes the README and only writes templates when the folder is fresh, so your edits are never overwritten.

File
Targets
Use for
concept-profile.md
concepts/**
Encyclopedia-style entries on ideas, patterns, mental models. Anti-incumbent editorial stance baked in.
vocabulary-profile.md
Vocabulary/**
Term definitions with disambiguation through an innovation-consulting lens.
source-profile.md
Sources/**
Profiles of trusted sources — books, people, channels, publications, journals, reports, events. Type-aware.
toolkit-profile.md
Tooling/**
Profiles of tools, products, platforms, frameworks.

Read the full directory-templates reference →

Provider depth

Each modal carries its own knobs

Most "AI for Obsidian" plugins flatten every provider into a single textarea. Perplexed exposes the controls each provider actually offers — focus modes for Perplexica, web search and adaptive thinking for Claude, the model-recency matrix for Perplexity, the local-model presets for LM Studio.

Perplexity

Hosted

Search-augmented research

Command
Ask Perplexity
Endpoint
api.perplexity.ai
Auth
API key (paid)
  • Model picker — sonar-deep-research, sonar-pro, sonar-small, llama-3.1-sonar-small-online, llama-3.1-sonar-large-online
  • Recency filter — day / week / month / year
  • Live model description that updates as you switch
  • Service-status command for connectivity check

Claude

Hosted

Direct Anthropic API

Command
Ask Claude
Endpoint
api.anthropic.com
Auth
API key (paid)
  • Model picker with live model description
  • Effort dropdown — controls thinking depth and total token spend
  • Enable web search — server-side web_search_20250305 with per-claim citations attached to text blocks
  • Adaptive thinking — Claude reasons before answering on complex prompts
  • Stream response toggle — recommended for long answers

Perplexica / Vane

Local

Self-hosted, search-augmented

Command
Ask Perplexica / Vane
Endpoint
localhost:3030 (default, configurable)
Auth
None — runs locally
  • Focus modes — Web Search, Academic, Writing Assistant, Wolfram Alpha, YouTube, Reddit
  • Optimization modes — Speed, Balanced, Quality (sources × synthesis depth tradeoff)
  • Live tagline beneath each picker explains what the mode actually does
  • No API key required — runs on your machine via Perplexica

LM Studio

Local

Whatever you have loaded locally

Command
Ask LM Studio
Endpoint
localhost:1234 (default, configurable)
Auth
None — runs locally
  • Bundled-model presets — Phi-4 Reasoning Plus, Gemma 3 12B, Llama 3.2 3B Instruct
  • Custom-model option — LM Studio routes to whichever model is loaded
  • Per-model tagline in the picker
  • Editable default system prompt in plugin settings

Make it yours

Every prompt is editable

The defaults are reasonable, but they're not you. Every system prompt, every article template, every image-references prompt, every input placeholder — they're all text fields in plugin settings. Reset to defaults whenever you wander too far.

System prompts (per provider)

Edit the system prompt for Perplexity, Perplexica / Vane, and LM Studio individually — your editorial voice, not the plugin defaults.

Article generator templates

Two editable templates: one for sonar-pro requests, one for sonar-deep-research. {TERM} is the interpolation token.

Image references prompt

The prompt that gets appended whenever a request asks for return_images. Tune it to favor screenshots vs. diagrams vs. photographs.

Text enhancement prompt

The prompt template used when you enhance a selection. {TEXT} interpolates your highlighted prose.

Placeholder text

Customize every input placeholder across the modals — small, but it makes the plugin feel like yours.

Reset to defaults

A "Reset prompts to default" command in the palette puts everything back if you wander too far.

What happens between press-enter and on-disk

Streaming & cleanup pipeline

The reason perplexed reaches for raw fetch() over Obsidian's requestUrl: SSE chunks need to flush as they arrive, not after the whole response buffers.

  1. 01

    Stream

    fetch() SSE connection — Obsidian's requestUrl buffers the whole response, which defeats live writes. Chunks land in the file every ~500ms so failures surface fast.

  2. 02

    Capture

    search_results and images arrays captured during the stream from Perplexity's SSE metadata, kept for post-processing.

  3. 03

    Wrap & swap

    <think>…</think> blocks wrap to fenced think-output. [IMAGE N: …] markers swap to ![desc](url) using the captured images array. Fallback # Images section if the model misses.

  4. 04

    Footer & stamp

    Sources footer emitted as canonical [N]: [Title](URL) (cite-wide-compatible). cf_last_run, cf_last_run_model, and (for books) google_books_url stamped to target frontmatter.

What leaves your vault

Network use & privacy

Perplexed only contacts remote services when you invoke their commands. No telemetry, no auto-updates, no vault content sent anywhere implicitly. The plugin manifest is isDesktopOnly: true.

  • Only prompts you submit through a modal — or text you have explicitly selected — leave the editor.
  • API keys live in plugin settings, scoped to the vault.
  • Local model surfaces (Perplexica, LM Studio) keep the request on your machine.
  • Obsidian handles plugin updates through the community directory — the plugin does not self-update.

Get started

From zero to first folder run

  1. 01

    Install from the community plugins directory

    Once approved, install via Settings → Community plugins → Browse → search "Perplexed". Until then: clone the repo into <vault>/.obsidian/plugins/perplexed/ and run pnpm install && pnpm build.

  2. 02

    Configure at least one model surface

    Settings → Perplexed. Drop in a Perplexity or Anthropic API key for hosted, or point at a local Perplexica / LM Studio endpoint. You can use any combination.

  3. 03

    Let the templates seed

    On first load, perplexed writes the four shipped templates plus a README to Content-Dev/Templates/ in your vault. Edit them, add your own, or click Re-seed templates anytime to pull in shipped updates without overwriting your edits.

  4. 04

    Apply a template to a folder

    Open the command palette, pick "Apply directory template to folder", choose a folder under your templates' applies-to-paths globs, confirm the file count. Watch chunks land in real time.