当用户想阅读、学习、分析或深入理解一篇研究论文时使用。支持论文标题、citation key、PDF 路径或 URL 作为输入。结果直接存入 Obsidian。
使用该技能时,传入论文标题、citation key、本地路径或 URL。
输出语言:默认使用中文生成所有材料(README、summary、insights、qa、method、
mental-model、reflection、代码注释、HTML 讲解文字等)。专业术语在首次出现时可以
保留英文原词(可配合中文括注),例如 self-attention(自注意力)、BEV、
contrastive loss。仅当用户用英文提问,或明确要求用英文生成时,才整体改用英文。
主要目标: 促进深入的概念理解与研究级思考。
次要目标: 构建结构化、可复用的论文知识体系。
这个工作流不只是做摘要,它是在围绕论文构建一个学习环境。
if [ ! -f "${CLAUDE_PLUGIN_ROOT}/.installed" ]; then
echo "First run - installing dependencies..."
cd "${CLAUDE_PLUGIN_ROOT}"
npm install || exit 1
touch "${CLAUDE_PLUGIN_ROOT}/.installed"
echo "Dependencies installed!"
fi
推荐环境:
强制规则(必须遵守)
只要用户输入不是 URL 且不是本地文件路径,就必须通过 Zotero Better-BibTeX JSON-RPC 搜索本地论文库。严禁使用 WebSearch / WebFetch / 任何网络搜索工具去 查找论文。paper-vault 的核心前提是用户想学习他们已经在 Zotero 里管理的论文。
如果 Zotero 查询失败(服务未启动、Better-BibTeX 未安装、搜索结果为空), 必须停下来询问用户,不要自行改用 WebSearch 或编造 PDF 链接。
支持多种输入格式:
hafnerMasteringDiverseControl2025):直接通过 Zotero 获取~/Downloads/paper.pdfhttps://arxiv.org/abs/1706.03762注意:当输入是标题/关键词时,不要猜测 arxiv URL 去下载——必须走 Zotero。
USER_INPUT="<user-input>"
if [[ "$USER_INPUT" =~ ^https?:// ]]; then
# URL:下载 PDF
INPUT_PATH=$(node ${CLAUDE_PLUGIN_ROOT}/skills/study/scripts/download-pdf.cjs "$USER_INPUT")
elif [[ -f "${USER_INPUT/#\~/$HOME}" ]]; then
# 本地文件路径
INPUT_PATH="${USER_INPUT/#\~/$HOME}"
else
# 默认分支:只要不是 URL/本地路径就进入这里(标题、关键词或 citation key)
# 必须通过 Zotero 查询,禁止使用 WebSearch/WebFetch。
echo "Searching Zotero for: $USER_INPUT"
SEARCH_RESULT=$(curl -s -f --max-time 5 "http://localhost:23119/better-bibtex/json-rpc" \
-X POST -H "Content-Type: application/json" \
-d "{\"jsonrpc\":\"2.0\",\"method\":\"item.search\",\"params\":[\"${USER_INPUT}\"],\"id\":1}")
CURL_EXIT=$?
echo "$SEARCH_RESULT"
echo "curl exit code: $CURL_EXIT"
fi
Claude 必须按下述规则解析 SEARCH_RESULT 并处理异常情况:
curl 返回非 0,或连接被拒绝):
result 字段是空数组):
<input> 匹配的论文。请提供更精确的标题/作者、
改用 URL(arxiv/DOI)或本地 PDF 路径。"citation-key 作为 CITATION_KEY,进入 1b。此处使用的 CITATION_KEY 只能来自:(a) 用户直接输入的 citation key,或
(b) 1a 步 Zotero 搜索的结果。绝不能由 Claude 凭标题推断或来自 WebSearch。
CITATION_KEY="<citation-key-from-search>"
ATTACH_RESULT=$(curl -s "http://localhost:23119/better-bibtex/json-rpc" \
-X POST -H "Content-Type: application/json" \
-d "{\"jsonrpc\":\"2.0\",\"method\":\"item.attachments\",\"params\":[\"${CITATION_KEY}\"],\"id\":1}")
echo "$ATTACH_RESULT"
# 从返回结果中提取 path 字段(选择 .pdf 后缀的条目)
# INPUT_PATH="<extracted-pdf-path>"
node ${CLAUDE_PLUGIN_ROOT}/skills/study/scripts/parse-pdf.js "$INPUT_PATH"
输出内容包括:
在生成任何文件前,先评估:
难度等级
论文类型
方法复杂度
该评估决定:
method.md.ipynb在生成文件前,基于对论文语义的理解推断出恰好 2 个标签。
规则:
paper、research、ai、ml示例:
machine translation, self-attention3d detection, bev transformerprotein folding, structure predictionOBSIDIAN_VAULT="$HOME/Documents/Obsidian Vault"
NOTE_DIR="$OBSIDIAN_VAULT/Paper-Vault/{paper-slug}"
mkdir -p "$NOTE_DIR"
mkdir -p "$NOTE_DIR/images"
mkdir -p "$NOTE_DIR/code"
所有后续文件均写入 $NOTE_DIR/。
所有文件通过 Write tool 直接写入:
$HOME/Documents/Obsidian Vault/Paper-Vault/{paper-slug}/
15 个问题:
使用以下格式:
### Question
<details>
<summary>Answer</summary>
Detailed explanation.
</details>
---
包含:
至少创建一个可运行的演示,写入:
$HOME/Documents/Obsidian Vault/Paper-Vault/{paper-slug}/code/
指导原则:
可能的类型:
.ipynb)命名要有描述性:
避免使用泛化文件名。
obsidian vault="Obsidian Vault" open path="Paper-Vault/{paper-slug}/README.md" newtab