Link & Tag Intelligence
pendingby zhangcrazyone
Native-first bilingual link and tag workflows with preview-driven references and semantic bridge hooks.
Link & Tag Intelligence
Native-first bilingual linking, tagging, and research-note workflows for an Obsidian vault.
The plugin is now designed around a CLI-first ingestion model:
- the plugin handles display, triggering, preview, tags, and relations
- an external shell JSON CLI handles DOI, arXiv, and PDF ingestion
- Zotero remains optional for users who already maintain a Zotero library
Features
- Preview-driven link insertion
- Block reference and line reference insertion
- Sidebar for current note, outlinks, backlinks, exact references, relations, tags, unlinked mentions, ingestion status, and semantic bridge status
- Typed research relations for literature review and drafting
- Citation-aware metadata pills for citekey, author, year, source type, locator, and evidence kind
- Native tag management and bilingual tag suggestions
- External ingestion CLI for DOI, arXiv, and PDF capture with OpenAlex citation enrichment
- Optional external semantic bridge for retrieval
Plugin Workflow
After enabling the plugin, open the Link & Tag Intelligence sidebar from the ribbon or command palette.
Main actions:
Ingest research sourceInsert link with previewInsert block referenceInsert line referenceQuick link selected textAdd relation to current noteManage vault tagsSuggest tags for current noteSemantic search via external command
Recommended research flow:
- Run the ingestion CLI from the plugin to create a literature note from a DOI, arXiv ID, or PDF.
- Open the source PDF and use
PDF++for page-aware evidence capture. - Use this plugin to add exact references, typed relations, and controlled tags.
- Use the semantic bridge only when you want retrieval from your own external search toolchain.
Ingestion CLI
The repository ships a local CLI at cli/lti-research.mjs.
It supports five top-level commands plus a reference utility family:
search: query arXiv and return candidate papersresolve: fetch metadata onlyingest: create a literature note and optional attachment copypaper: build a topic note, analysis notes, matrix, map, outline, and draftinspect: inspect a created note inside a vaultref inspect/ref locate/ref format: inspect an exact line span, locate a line or paragraph from a snippet, and generate a line or block reference for agents
When a source has a DOI, the CLI enriches it through OpenAlex. That applies to:
- direct DOI ingestion
- arXiv entries that expose a DOI
- PDFs imported with
--metadata-doi
OpenAlex-enriched fields include:
openalex_idcited_by_countreferenced_worksrelated_worksconceptscounts_by_yearpublication_datesource_display_name
Run help:
node cli/lti-research.mjs --help
Source inputs
You can select a source in either of these forms:
--source-type doi --source 10.1145/...
--source-type arxiv --source 2403.01234
--source-type pdf --source /path/to/paper.pdf
Or use convenience flags:
--doi 10.1145/...
--arxiv 2403.01234
--pdf /path/to/paper.pdf
Resolve examples
node cli/lti-research.mjs resolve --doi 10.1145/123456.7890
node cli/lti-research.mjs resolve --arxiv 2403.01234
node cli/lti-research.mjs resolve --pdf ./papers/coffee.pdf --metadata-doi 10.1145/123456.7890
Search examples
node cli/lti-research.mjs search \
--query "data governance digital transformation" \
--max-results 10
Ingest examples
node cli/lti-research.mjs ingest \
--doi 10.1145/123456.7890 \
--vault /path/to/vault
node cli/lti-research.mjs ingest \
--arxiv 2403.01234 \
--vault /path/to/vault \
--literature-folder Knowledge/Research/Literature \
--attachments-folder Knowledge/Research/Attachments
node cli/lti-research.mjs ingest \
--pdf ./papers/coffee.pdf \
--metadata-doi 10.1145/123456.7890 \
--vault /path/to/vault \
--download-pdf true
Paper workflow examples
Build a paper workspace from explicit source specs:
node cli/lti-research.mjs paper \
--topic "数据治理和数智转型" \
--vault /path/to/vault \
--sources "arxiv:1706.03762,arxiv:2403.01234,pdf:/absolute/path/to/local-paper.pdf" \
--max-sources 3
Or let the CLI search arXiv first and auto-ingest the top results:
node cli/lti-research.mjs paper \
--topic "数据治理和数智转型" \
--query "data governance digital transformation" \
--vault /path/to/vault \
--max-sources 3
Generated notes:
- topic note in
Knowledge/Research/Topics - per-paper analysis notes in
Knowledge/Research/Analysis - comparison matrix and literature map in
Knowledge/Research/Analysis - outline and draft in
Knowledge/Research/Drafts - literature notes and workflow outputs include OpenAlex citation statistics when DOI metadata is available
Inspect example
node cli/lti-research.mjs inspect \
--vault /path/to/vault \
--note-path Knowledge/Research/Literature/doi-10-1145-123456-7890.md
Reference examples
Inspect an exact evidence span before writing:
node cli/lti-research.mjs ref inspect \
--vault /path/to/vault \
--note-path Knowledge/Research/Literature/doi-10-1093-polsoc-puaf001.md \
--start-line 20 \
--end-line 24
Locate paragraph-level evidence candidates from a snippet before choosing one:
node cli/lti-research.mjs ref locate \
--vault /path/to/vault \
--note-path Knowledge/Research/Literature/doi-10-1093-polsoc-puaf001.md \
--query "the data governance program must balance control and reuse" \
--scope paragraph
Generate a legacy line reference for an agent to insert into an analysis or draft:
node cli/lti-research.mjs ref format \
--vault /path/to/vault \
--note-path Knowledge/Research/Literature/doi-10-1093-polsoc-puaf001.md \
--kind line \
--start-line 20 \
--end-line 24
Generate a reference directly from a unique snippet match instead of hand-counting lines:
node cli/lti-research.mjs ref format \
--vault /path/to/vault \
--note-path Knowledge/Research/Literature/doi-10-1093-polsoc-puaf001.md \
--kind line \
--query "the data governance program must balance control and reuse" \
--scope paragraph
Generate the plugin's legacy block-style line-range reference:
node cli/lti-research.mjs ref format \
--vault /path/to/vault \
--note-path Knowledge/Research/Literature/doi-10-1093-polsoc-puaf001.md \
--kind block \
--start-line 20 \
--end-line 24
Plugin Command Configuration
Set the plugin's Ingestion command setting to a shell command that calls the CLI and returns JSON on stdout.
Example:
node /absolute/path/to/obsidian-link-tag-intelligence/cli/lti-research.mjs ingest \
--source-type {{source_type}} \
--source {{source}} \
--vault {{vault}} \
--literature-folder {{literature}} \
--attachments-folder {{attachments}} \
--template-path {{template}} \
--metadata-doi {{metadata_doi}} \
--metadata-arxiv {{metadata_arxiv}} \
--title {{title}} \
--authors {{authors}} \
--year {{year}} \
--download-pdf {{download_pdf}}
Supported ingestion placeholders:
{{source_type}}{{source}}{{vault}}{{file}}{{selection}}{{literature}}{{attachments}}{{template}}{{metadata_doi}}{{metadata_arxiv}}{{title}}{{authors}}{{year}}{{download_pdf}}
Each placeholder is shell-escaped before execution.
Agent Usage
This design is intended to work well with Codex, Claude Code, or any other shell-capable coding agent.
Examples:
node cli/lti-research.mjs resolve --doi 10.1145/123456.7890
node cli/lti-research.mjs ingest \
--pdf ./papers/coffee.pdf \
--metadata-arxiv 2403.01234 \
--vault /path/to/vault
node cli/lti-research.mjs paper \
--topic "数据治理和数智转型" \
--vault /path/to/vault \
--sources "arxiv:1706.03762,arxiv:2403.01234"
The contract is simple:
- input through shell flags
- stdout as JSON
- validation errors returned as JSON with a non-zero exit code
- unexpected runtime errors on stderr
- non-zero exit code on failure
No MCP layer is required for the ingestion path.
Output Shape
Typical ingest output:
{
"status": "created",
"source_type": "doi",
"source_id": "10.1145/123456.7890",
"title": "Coffee Extraction Dynamics",
"note_path": "Knowledge/Research/Literature/doi-10-1145-123456-7890.md",
"attachment_paths": [
"Knowledge/Research/Attachments/doi-10-1145-123456-7890.pdf"
],
"warnings": [],
"metadata": {
"entry_type": "journal-article",
"citekey": "smith2024coffee",
"openalex_id": "https://openalex.org/W1234567890",
"cited_by_count": 12,
"referenced_works_count": 24,
"related_works_count": 10,
"concepts": ["Data governance", "Digital transformation"]
}
}
Typical inspect output:
{
"status": "ok",
"note_path": "Knowledge/Research/Literature/doi-10-1145-123456-7890.md",
"attachment_exists": true,
"frontmatter": {
"title": "Coffee Extraction Dynamics",
"source_type": "doi",
"entry_type": "journal-article",
"openalex_id": "https://openalex.org/W1234567890",
"cited_by_count": 12,
"concepts": ["Data governance", "Digital transformation"]
}
}
Typical paper output:
{
"status": "created",
"topic": "数据治理和数智转型",
"source_count": 3,
"topic_note_path": "Knowledge/Research/Topics/topic-abc123.md",
"matrix_note_path": "Knowledge/Research/Analysis/topic-abc123-comparison-matrix.md",
"map_note_path": "Knowledge/Research/Analysis/topic-abc123-literature-map.md",
"outline_note_path": "Knowledge/Research/Drafts/topic-abc123-outline.md",
"draft_note_path": "Knowledge/Research/Drafts/topic-abc123-draft.md"
}
Literature Note Frontmatter
Generated notes include fields such as:
title: "Coffee Extraction Dynamics"
authors:
- "Jane Smith"
- "Alex Lee"
author: "Jane Smith, Alex Lee"
year: "2024"
source_id: "10.1145/123456.7890"
source_type: "doi"
entry_type: "journal-article"
citekey: "smith2024coffee"
openalex_id: "https://openalex.org/W1234567890"
cited_by_count: 12
referenced_works: ["https://openalex.org/W1", "https://openalex.org/W2"]
related_works: ["https://openalex.org/W3"]
concepts: ["Data governance", "Digital transformation"]
counts_by_year: [{"year": 2025, "cited_by_count": 3}, {"year": 2024, "cited_by_count": 9}]
publication_date: "2024-01-15"
source_display_name: "Journal of Test Cases"
doi: "10.1145/123456.7890"
arxiv_id: ""
pdf: "Knowledge/Research/Attachments/doi-10-1145-123456-7890.pdf"
pdf_url: "https://example.com/paper.pdf"
source_url: "https://example.com/paper"
tags:
- literature-note
entry_type is intended to represent the human-meaningful source kind such as journal-article, preprint, or pdf-document.
Companion Tools
Recommended stack:
PDF++Use it for page-aware reading and evidence extraction.Smart ConnectionsUse it for local semantic recall if you want embeddings-based retrieval in the vault.External semantic bridge CLIUse it when you want citation-aware retrieval results.Zotero Integration + Better BibTeXOptional. Keep this only if you already have a Zotero-centered workflow.
Semantic Bridge
The semantic bridge is separate from ingestion.
- ingestion creates or inspects literature notes
- semantic bridge retrieves candidate notes from an external tool
Supported semantic placeholders:
{{query}}{{vault}}{{file}}{{selection}}
Recommended semantic JSON shape:
{
"results": [
{
"path": "Knowledge/Research/Literature/doi-10-1145-123456-7890.md",
"title": "Coffee Extraction Dynamics",
"score": 0.91,
"excerpt": "Relevant excerpt",
"reason": "Matched by semantic retrieval",
"citekey": "smith2024coffee",
"author": "Smith",
"year": 2024,
"page": "18",
"source_type": "journal-article",
"evidence_kind": "quote",
"suggested_tags": ["literature-review", "experiment"],
"suggested_relations": {
"supports": ["Drafts/Coffee Extraction Argument.md"]
}
}
]
}
Build
npm install --package-lock=false
npm run build
npm test
Manual Install
Copy these files into:
<vault>/.obsidian/plugins/link-tag-intelligence/
manifest.jsonmain.jsstyles.css
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.