The thinking
Context
Specs, plans, blueprints, chores. Living documentation that underwrites the code, kept in
the repo's context-v/ and rendered here when marked publishable.
Specs
-
Github Splash Page for Content Farm
An in-repo Astro site that turns the content-farm pseudomonorepo into a public landing page — hero, plugin gallery, changelog and context-v rendering — deployed for free off GitHub Pages while we wait for a real marketing surface.
-
Metafetch source notes — fetch from any journal URL, not just `url`
A note about a paper keys its link as `arxiv:`, not `url:` — and metafetch couldn't see it. A URL picker across every frontmatter property, a scholarly metadata tier, and vault-wide identity codes now make a source note worth having.
- cite-wide
Modal for Pasting LLM Native Content
Stop the parsing problem at the source: a paste-target textarea plus a Google/Perplexity selector, feeding the parser at the cursor.
-
Per-Directory Profile Templates — v0.1 Spike
One Perplexity call per file, four template zones, and `***` as the scratch terminator — aborts rather than merge if the body has prose.
-
Stenographer: an Obsidian Plugin that Transcribes Audio Content
Drop a YouTube, SoundCloud, or other listenable link into Obsidian and Stenographer turns it into a fully-frontmattered note with a streaming, AI-generated transcript — sources become searchable knowledge in one move.
- perplexed
Using Files as Prompt Outlines
Prompt outlines become ordinary vault markdown, so adding one is dropping a file — and ArticleGeneratorModal stops being special-cased.
Blueprints
- image-gin
Blueprint — Add a New Image-Generation Provider (case study: Ideogram)
Recraft keeps brand style server-side as a style_id; Ideogram has none, so brand voice becomes a prefix/suffix prompt template in settings.
- cite-wide
Citation Acquisition Pipeline — Agent Architecture, Phases, Output Contract
The HOW for filling the Lossless Citation schema: decouples the cheap capture moment from the expensive canonicalization moment.
- cite-wide
Citation Field Acquisition Guide — Per-Field Reference for Filling the Lossless Schema
Per-field reference for the acquisition agent: source of truth, cheap path, expensive fallback, validation rule, and failure behavior.
- cite-wide
Lossless Citation Standards — Schema, Audiences, Portability Thesis
The schema layer: what fields exist, why each exists, and how they outlive any one rendering target. The WHAT and WHY, not the HOW.
- cite-wide
Maximize Data Collection on Cannonical Sources
Only 1–5 of the 40 sources in a memo earn the rich schema — and a field-by-field split of what is deterministic versus what needs AI.
- cite-wide
Parse Common Citation Formats
Six citation patterns coexist in one file; the existing regex only matches [1], so Google's [1, 2, 3] and Perplexity's [1][2] slip through.
Plans
-
A Component Inserter
An Obsidian command that scaffolds the right block — HTML, codefence, callout, embed — at the cursor, with frontmatter-driven defaults.
-
Auto-Hyperlink Feature Names in Generated Tables
Crawls the entity's domain to turn feature-table cells into links to the real feature pages — deferred until the headless crawler exists.
-
Cite-Wide — dedupe inline repetition of identical hex citations
One backreferenced regex collapses runs like [^jtas3k] [^jtas3k] — a different problem from dedupe-by-URL, which must stay untouched.
-
Create a Study of the Best Obsidian Plugins
Pin the 10–15 most interesting Obsidian plugins as a real study, so we read their code instead of paraphrasing from training data.
-
Dependency upgrades across the Obsidian plugin family — full bump inventory, safe → major → forks
Every outdated dependency in the ten Lossless-original modules plus the umbrella, grouped patch → minor → major, with upstream release-notes research attached to every major before it moves.
-
Image Drop Confirmation Gate
An Obsidian plugin that asks where a dropped image goes before anything hits disk or network — a private chart on imgur is a phone call.
- image-gin
Plan — Bring Image Gin up to Obsidian Community-Plugin Publishing Standards
17 explicit-any sites, 2 innerHTML calls, and a hand-rolled YAML parser — tighten ESLint to error first so pnpm build surfaces the rest.
- perplexed
Plan — Bring Perplexed up to Obsidian Community-Plugin Publishing Standards
25 explicit-any sites plus the four-part 0.0.0.1 version the bot rejects as non-semver, a missing LICENSE, and three unused runtime deps.
- image-gin
Plan — Final ObsidianReviewBot cleanup round for image-gin v0.2.x
Local lint is clean but the bot flags 49 sentence-case hits — its default brand list has no Magnific or Ideogram, so they get a /skip reply.
- perplexed
Plan — Submission Blockers Punch List (from docs.obsidian.md re-read)
Six docs-derived blockers — doubled command IDs, a description starting with A plugin for Obsidian, and no network-use disclosure.
Prompts
-
Add a New API Provider to a Metadata-Fetching Plugin
Reusable prompt for wiring a new third-party metadata API (e.g. Microlink, Jina Reader, OpenGraph.io) into an Obsidian plugin like Metafetch as an additional fetcher, without breaking the existing flows.
- image-gin
Prompt — Add a New Model Provider to Image Gin
Agent-facing instruction for adding an image provider to Image Gin: the blueprint, the Recraft/Ideogram/Magnific prior art, the exact files.
Chores
-
Renaming a Repo and managing Downstream Effects
It's not as simple as renaming the github path.
-
Tidy Naming — Repo Mentions of 'Obsidian' and 'Plugin'
Obsidian's community-plugin guidelines forbid using 'Obsidian' or 'Plugin' in the brand name (repo, manifest, README, description). Several of our repos still do. A punch list of what to rename, where, and why we held off until now.
Reminders
-
Obsidian Marketplace Compliance — Rules the Review Bot Enforces
The portal pins scans to a (tag, commit) pair, so a re-scan needs a new release tag — plus the description that lives in three places.
-
Obsidian Plugin Type Safety — Rules, Patterns, and Cite-Wide Conventions
Cite-wide was rejected for `any` with no appeal — even eslint-disable counts. Plus the coercion boundary treating frontmatter as untrusted.
- cite-wide
The Lossless Citation Open Specification
Hex codes instead of numerics so pasted sources never collide — plus exact spacing and the Claude cited_text blockquote the web strips.
- cite-wide
This Is an Obsidian Plugin — Read the Obsidian API Docs
The Obsidian API is the source of truth: `any`, innerHTML, and var are all outright bans, and Electron breaks browser muscle memory.
- file-transporter
This Is an Obsidian Plugin — Read the Obsidian API Docs
The Obsidian API is the source of truth: `any`, innerHTML, and var are all outright bans, and Electron breaks browser muscle memory.
- filestarter
This Is an Obsidian Plugin — Read the Obsidian API Docs
The Obsidian API is the source of truth: `any`, innerHTML, and var are all outright bans, and Electron breaks browser muscle memory.
- grab-reference
This Is an Obsidian Plugin — Read the Obsidian API Docs
The Obsidian API is the source of truth: `any`, innerHTML, and var are all outright bans, and Electron breaks browser muscle memory.
- image-gin
This Is an Obsidian Plugin — Read the Obsidian API Docs
The Obsidian API is the source of truth: `any`, innerHTML, and var are all outright bans, and Electron breaks browser muscle memory.
- lmstud-yo
This Is an Obsidian Plugin — Read the Obsidian API Docs
The Obsidian API is the source of truth: `any`, innerHTML, and var are all outright bans, and Electron breaks browser muscle memory.
- perplexed
This Is an Obsidian Plugin — Read the Obsidian API Docs
The Obsidian API is the source of truth: `any`, innerHTML, and var are all outright bans, and Electron breaks browser muscle memory.
- plunk-it
This Is an Obsidian Plugin — Read the Obsidian API Docs
The Obsidian API is the source of truth: `any`, innerHTML, and var are all outright bans, and Electron breaks browser muscle memory.
Explorations
-
Citation Resolution and the Canonical Source
Link-rot recovery, lookup-before-create on save, and content preservation for RAG are three operations on one underlying entity.
-
Enabling Obsidian Plugins to Access Homegrown API Helpers
Architecture patterns for bridging Obsidian's JavaScript environment to powerful, non-JS backend logic (Python, Rust, CLI tools) via lightweight cloud proxies.
-
Moving Beyond Simple API Calls — LLM Orchestration Options for Our Plugins
Locks the `cf` codefence grammar and holds the line on direct vendor SDKs — Vercel AI SDK if we outgrow them, never LangChain.
- perplexed
Multi-Stage Cooperative Claude + Perplexity with RAG
What if a market-map draft were the output of three agents — a RAG pre-flight that names what to include, a Perplexity research run that finds the rest, and a Claude editorial pass that never steps on either — instead of one single-shot prompt?
-
Self-Hosting the Vault via Ignis — Team-Wide Browser Access to Content Farm
content-farm's whole plugin set assumes desktop Obsidian. Ignis runs Obsidian in a browser against a server-side vault — worth knowing about, not yet worth committing to.
-
Using APIs to Ingest More Data
Beyond OpenGraph.io — what Jina.ai already gives us (we pay for it), what other fetching services do, and a rough sketch of how a portfolio-company site crawler would actually work.
Issues
- perplexed
Getting Claude to Respond with Research
Claude returns 60 URLs but zero per-claim citations — web_search_20260209's dynamic filter loses the attachment, so no inline markers.
-
Metafetch wraps tags array items in quotes
Metafetch re-serializes the whole frontmatter, so its quote-everything rule turns an inline `tags: [a, b]` into one quoted string.
-
Nudging AI search to return contextually appropriate images
The streaming pipeline silently drops Perplexity's images array — port the [IMAGE N] marker pattern the article generator already uses.
-
Obsidian Review Bot Feedback on Perplexed Submission
165 bot findings, all in main.ts — plus the Appendix: the PR queue died mid-fix, and the plugin description lives in three places.
- perplexed
Partials and preambles for perplexed templates
Mermaid rules sit in all four templates and three directives are hardcoded in TS — pull both into vault-visible partials and preambles.
- cite-wide
Paste LLM Content drops prose structure and emits link-only citations
Paste rewrites citation tokens and nothing else — headings flatten, refs become self-referential links, and one URL gets two hex codes.
-
Symlinked vault folders are invisible to the Obsidian index
Half our vault's top-level folders are symlinks into the monorepo. `vault.getAbstractFileByPath()` doesn't reliably see them, so every plugin that checks 'does this folder exist' before creating it is one symlink away from an EEXIST crash.
- cite-wide
Users need to define their own citation format — the Lossless house style is hardcoded
Cite Wide hardcodes one house style across four services. Templating is the feature; centralizing the format is the prerequisite.
- perplexed
Wall-clock timeout cuts off long deep-research streams
The directory-template runtime caps every stream by wall clock, so a 7,500-word deep-research draft terminated mid-sentence.
-
What to do with grab-reference — a citation-manager web stack living in the Obsidian plugin family
grab-reference turns out not to be an Obsidian plugin: it's a private 'citation-manager' pnpm workspace (web app + Prisma API + Docker) on a 2024-era toolchain. Decide its fate before spending any upgrade effort on it.
-
Widening (and Re-Sizing) Obsidian Plugin Modals via CSS
Modal width lives on this.modalEl, not this.contentEl — the plugin-template convention that everyone copies is why modals stay narrow.
General
- image-gin
Chore to Update All Dependencies
TS 6 forced moduleResolution bundler and a node types entry — and revealed esbuild had been silently dropping the Freepik stylesheet.
-
Migrating When an API Provider Rebrands
A vendor rebrands mid-integration — different name, different domain, sometimes different auth surface. What do you fix today, what do you leave alone, and what's the safe order? A short runbook from the day Freepik turned into Magnific.