917dhj/deeppapernote
Generate a high-quality deep-reading note for a single paper and write it into an Obsidian-style vault. Use when the user gives a paper title, DOI, URL, arXiv ID, Zotero item, or local PDF and wants a polished Markdown note with strong structure, evidence-based analysis, and figure placeholders.
npx skills add https://github.com/917Dhj/DeepPaperNote --skill deeppapernote
Use this skill when the user wants one outcome:
Chinese trigger examples:
给这篇论文生成深度笔记写一篇高质量论文精读笔记把这篇文章整理成 obsidian 笔记读这篇论文并生成 md 笔记This skill is intentionally narrow:
The finished note must be more than a summary. It should reconstruct the paper's argument:
Default writer persona:
The note must adapt to the paper type. Use the same base structure, but shift emphasis for AI methods, benchmarks, clinical studies, and humanities or social-science papers.
Follow this order:
*_raw_sections.jsonl, *_source_manifest.json, and optional derived *_full_text.mdnote_plan that satisfies the generated bundle contract10. draft from the plan only after the grounding gate passes
11. have the model write the note
12. lint the final note against the same note_plan — this stage completes only when the lint artifact exists and every reported passes_* gate is true; otherwise revise and rerun lint. If the lint output contains passes_style_gate: false, apply the Style Gate Enforcement rule before advancing to step 13, 14, or 15
13. perform final_quality_review after lint passes
14. perform final_readability_review after the quality review passes
15. write into Obsidian
This is the required workflow for a normal single-paper note request, not a loose suggestion.
Unless this skill explicitly marks a stage as optional, required stages must not be silently skipped, reordered into a shortcut, or treated as complete just because a partial artifact already exists.
Global no-short-circuit rule:
Completion-language rule:
笔记已完成 only when the required workflow is actually complete已生成草稿 when drafting is done but lint, final readability review, or save is still pending已通过校验 only when lint has actually been run and passed已保存到 Obsidian only when the write step has actually succeededlint 已通过 as equivalent to 整篇笔记已经润色完成SKILL.md plus the generated synthesis_bundle.json must be enough to complete a normal note-generation run.
Files under references/ are optional stage-specific deep dives, not a default reading checklist.
Non-negotiable rules:
source_manifest, raw sections, coverage metadata, explicit note_plan, and inspected paper evidence; never finish from title/abstract/headings alone*_raw_sections.jsonl and *_source_manifest.json are the canonical reading material; old top-N evidence buckets, truncated section_texts, and candidate_chunks are not model-facing writing inputs原文摘要翻译 before 一句话总结 and a dedicated 创新点 section immediately after 原文摘要翻译原文摘要翻译 is a faithful Chinese translation of the original abstract, not a bilingual block and not the model's own summary### 机制流程 under 方法主线, normally as a 3 to 4 step numbered flow with input, operation, and output destinationfinal_quality_review for analytical depth, then run final_readability_review for language polish, and rerun lint if either review edits the noteReference usage policy:
references/evidence-first.md, references/deep-analysis.md, or references/final-writing.md only when the paper is complex or the draft is too shallowreferences/figure-placement.md only for ambiguous figure/table placement or image replacement decisionsreferences/obsidian-format.md only for Markdown, vault, frontmatter, or reference-link formatting detailsreferences/note-quality.md or references/paper-types.md only for final review or domain adaptationreferences/metadata-sources.md only when metadata is incomplete, and references/architecture.md only for repository maintenance decisionsPrefer the strongest available source in this order:
Before web resolution, use the bundled scripts/resolve_paper.py Zotero Local API path to check the desktop library. Its default --zotero-mode auto prefers a unique local match and falls back to the existing providers when Zotero is unavailable or has no match. An explicit Zotero key has no safe web fallback and must be verified locally. Use off to make no Local API request, or required when the reference must resolve through Zotero. A trusted JSON artifact or explicit local PDF remains authoritative and bypasses this lookup. A compatible session-scoped Zotero/MCP integration may still provide a trusted input artifact when available, but it is not required for the built-in path.
Local-library-first rule:
scripts/locate_zotero_attachment.py to find the PDF under the user's Zotero storage.Formal Save states:
| Save Target state | Required action |
|---|---|
| Vault configured or provided and usable | Perform the Formal Save to that vault. |
| Vault configured or provided, but the Formal Save fails | Keep the current Save Target and attempt an in-scope recovery. If it still cannot complete, report blocked; do not switch to workspace. |
| No vault configured or provided | Ask whether the user wants to provide one. Use workspace only after the user explicitly chooses not to use a vault. |
#, ##, and ###.# title heading. Include at least a tags field with a papers/<domain> value and useful aliases; include date, doi, or arxiv_id when known, and omit unavailable fields rather than inventing placeholders.## 核心信息 must be a fixed metadata block only. Use only these fields, in this order, as - 字段名: 值 bullets: 标题, 标题翻译, 作者, 机构, 发表时间, 发表渠道, DOI, arXiv, 论文链接, 代码 / 项目, 数据 / 资源, 论文类型. Omit unavailable fields; put any guide sentence, takeaway, or analysis in 一句话总结 or a later section instead.原文摘要翻译 near the beginning when abstract metadata is available, before 一句话总结.原文摘要翻译 should directly translate the original paper abstract into Chinese rather than restating it as your own summary.原文摘要翻译 section itself should be Chinese-only; do not place English abstract sentences or English paragraph excerpts in that section.原文摘要翻译; keep it as the original abstract translated into Chinese.创新点 section immediately after 原文摘要翻译 and before 一句话总结.创新点 section should not be empty praise. It should enumerate the paper's actual innovations and briefly explain why each one matters.### subheadings in the technical sections when the paper is non-trivial.writing_contract.figure_table_contract before drafting or saving.note_plan; no review_pending item may cross that boundary.insert decision is complete only after Formal Save materializes the selected image into the paper-local images/ directory and the write succeeds.KV缓存 of, 批量ing, In相关 Researcher, or Single 序列 generation; rewrite the sentence naturally instead of preserving a partially translated phrase.lint_note.py output contains passes_style_gate: false, fix the reported issues and re-run lint. Keep fixing and re-running until lint passes — multiple rounds are normal and expected. Do not decide that any failure is an acceptable exception — proper nouns, math formulas, and citation metadata are not automatic exemptions. Only escalate to the user if the same failures appear unchanged across multiple rounds with no reduction, indicating the model is unable to make further progress independently.Model-first rule:
<thinking> block$...$ or $$...$$, not as inline code or fenced code blocksfinal_quality_review, check the full note against seven questions: whether the central evidence chain is complete, whether key settings and numbers are present, whether mechanisms or protocols are mapped to the result pattern they explain, whether the paper is positioned against strong baselines or alternative routes, whether Discussion/Limitations conclusions are explained mechanistically, whether proven claims are separated from unproven claims, and whether the research, engineering, replication, or validity takeaways are specific enough to reusefinal_quality_review passes, reread the full note once more for readability; do not stop at formal compliance onlyfinal_readability_review, ordinary English phrase leftovers should usually be rewritten into natural Chinese, while stable proper nouns may remain in Englishfinal_readability_review to invent new facts, empty filler text, or shallower but safer wording just to satisfy lintThe topic references above can improve difficult runs, but the normal execution path should not depend on reading all of them.
Use these bundled scripts rather than rebuilding the workflow from scratch:
scripts/check_environment.pyscripts/create_input_record.pyscripts/locate_zotero_attachment.pyscripts/resolve_paper.pyscripts/run_pipeline.pyscripts/collect_metadata.pyscripts/fetch_pdf.pyscripts/extract_source_text.pyscripts/extract_evidence.pyscripts/extract_pdf_assets.pyscripts/plan_figures.pyscripts/plan_figure_table_decisions.pyscripts/build_synthesis_bundle.pyscripts/lint_grounding.pyscripts/lint_note.pyscripts/materialize_figure_asset.pyscripts/write_obsidian_note.pyPython interpreter rule:
>=3.10.python3 is below 3.10, automatically look for another available interpreter that satisfies the requirement, such as python3.12, python3.11, python3.10, /opt/anaconda3/bin/python3, /opt/homebrew/bin/python3, or /usr/local/bin/python3.>=3.10.Troubleshooting rule:
scripts/check_environment.py only when a concrete dependency or integration question is blocking executionCurrent status:
scripts/run_pipeline.py now defaults to building a model-facing synthesis bundlescripts/write_obsidian_note.py can write the final note into a target vaultpdf_url, direct PDF URL, arXiv/open-access sources, publisher PDF if accessible, DOI enrichment, and any other current fetch path implemented by the workflow.Take 917dhj/deeppapernote from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.