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
- stenographer
A local transcription engine for Stenographer
Stenographer routes every job to a paid API, which is correct for public YouTube and wrong for a founder call. A third engine speaking the OpenAI transcription API against a user-supplied base URL covers whisper.cpp, Speaches and MLX in one integration — but it forces the pipeline's first real change: from URL-in to source-in.
- cite-wide
Enrich Citations
One command fills in every citation's missing title, author, date, publisher, and brand assets — and shows you every change before it writes.
-
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.
- cite-wide
Promote to Canonical Source
One command turns a source you'll cite again — a book, a report — into a rich record with its file and full text in your vault.
-
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.
-
Blueprint — Model Recipes: Any LLM API, Configured the Same Way in Every Plugin
One way for every Lossless plugin to call any model: a data-only recipe per provider, keys in Obsidian's keychain, and the same settings rows.
- 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.
- perplexed
Plan — Exa Retrieval Stage and the `include-sources:` Slot
Perplexity writes well but retrieves badly on companies; Exa retrieves well but doesn't write. Split the job.
- 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.
- metafetch
Plan — Folder profiles and social links (slice 1)
A Tooling note gets its GitHub org, LinkedIn page, and other socials from the company's own homepage. No API key needed.
- image-gin
Plan — Migrate Image Gin's Settings Tab to Obsidian 1.13's Declarative Settings API
Half of Image Gin's settings silently vanished in Obsidian 1.14, and none were searchable. Rebuilding the tab on Obsidian's declarative API fixes both.
-
Plan — Migrate the Lossless Plugin Family to Obsidian 1.13
Obsidian 1.13 changed how settings render and get searched, and pnpm 11 changed where its settings live. One playbook, nine plugins, each still standing on its own.
- perplexed
Plan — Outline Shaping and Adherence Modes
Hand-author an outline into a market map today and the plugin appends the draft below it instead of following it.
- perplexed
Plan — Run Snapshots and Restore
Line 830 wipes the target before the first byte of the stream arrives. Nothing in the plugin can undo that.
- perplexed
Plan — Section Refresh and Source Curation
Reshape one sub-segment, reject a weak source and make the web find a better one — without regenerating the whole map.
- 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.
- cite-wide
Plan — Upgrade Cite Wide to Obsidian 1.13 (0.3.0)
Cite Wide's commands stopped loading on Obsidian 1.14 and pnpm 12 wouldn't build it. One pass gets it loading, building, searchable, and tested.
- metafetch
Plan — Upgrade Metafetch to Obsidian 1.13 (0.2.0)
Direct Fetch leaves og_image empty on pages that plainly have one, and the settings tab is drawn the old way. One pass fixes the image, ports Cite Wide's extractor fixes, and moves Metafetch onto Obsidian 1.13.
- perplexed
Plan — Upgrade Perplexed to Obsidian 1.13 (0.4.0)
Perplexed has 56 settings across six research providers, and none of them show up in Obsidian's new settings search. 0.4.0 fixes that.
- perplexed
Plan — Vault-Aware Linking in Both Directions
Generated notes arrived orphaned, and the templates forbade linking rather than risk a model inventing a path.
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.
- metafetch
Folder-Aware Frontmatter Templates and Fetch Recipes
A note in Tooling/ wants different frontmatter than one in Sources/. Templates in zz-cf-lib say which fields; recipes say how to fetch them.
-
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.
- cite-wide
Issue: Enriching the Lossless Vault's 75 Citations with Promotion's Metadata Pipeline
We ran the new canonical-source pipeline over every citation in the vault. It filled 49 reference texts and 63 publishers, and found five bugs.
- image-gin
Issue: Recraft Generation Froze Obsidian, and the V4.1 Upgrade
Recraft billed 40 credits and returned an image, then Obsidian locked up before saving it. The fix also moves Image Gin onto Recraft V4.1.
-
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.
Handoffs
-
Handoff — Metafetch 0.2.0: Built, Pushed, Waiting on an In-Obsidian Check and a Release
Metafetch 0.2.0 is on development: the og:image fix, the 1.13 upgrade, folder profiles with socials, and any-model fields. Nothing is released yet.
-
Handoff — Upgrading the Remaining Plugins to Obsidian 1.13 and the Current Stack
Three plugins down, seven to go. The to-do list, commands, and traps from shipping Image Gin, Cite Wide, and Perplexed in one day.