SuperAPI AI Directory

zotero-report

Writing & research

View repository

Updated 10-16 09:06

About this skill

Zotero Report Skill

Generate comprehensive research reports from Zotero collections.

Prerequisites

  • Configuration file at config/config.json with Zotero and Obsidian settings
  • Environment variable ZOTERO_API_KEY

Step 0: Mode + Format Detection

Detect mode from user request:

  • "Make a report on this collection" → Mode 1 (collection)
  • "Find more related papers and report" → Mode 2 (extend)
  • "Find papers on topic X and report" → Mode 3 (topic)

Detect format:

  • "As PDF", "as Word", "as hwpx" → that format
  • Default: Markdown

Detect language:

  • "in English", "in English", "English report" → --language en
  • "in Korean", "in Korean", or default → --language ko
  • Default: ko

Mode 1: Collection-Only

Phase 1 - Data Collection

cd /Users/varde/code/arxiv-zotero-obsidian && python3 \
  .claude/skills/zotero-report/scripts/generate_report.py \
  --mode collection --collection "COLLECTION_NAME" --language {ko|en}

For deeper analysis with full text:

cd /Users/varde/code/arxiv-zotero-obsidian && python3 \
  .claude/skills/zotero-report/scripts/generate_report.py \
  --mode collection --collection "COLLECTION_NAME" \
  --include-full-text --max-chars-per-paper 10000 --language {ko|en}

Phase 2 - Analysis

Read the JSON output. For each paper:

  • Generate 3-5 line summary from abstract + pdf_text_preview
  • Identify cross-cutting themes, methodological patterns, research gaps

Phase 3 - Report Writing

Use templates/report_template_{language}.md as guide (where {language} is from the JSON output's language field: ko or en). Write the entire report in the detected language. Save as {collection_name}-report.md.

Phase 4 - Obsidian Notes

For each paper in the JSON, create an Obsidian summary note:

cd /Users/varde/code/arxiv-zotero-obsidian && python3 \
  .claude/skills/obsidian-summarize/scripts/create_summary.py \
  --arxiv-id "ID" --title "TITLE" --authors "AUTHORS" \
  --abstract "ABSTRACT" --zotero-key "KEY" \
  --subfolder "COLLECTION_NAME" \
  --summary "GENERATED_SUMMARY" --key-findings "F1|F2|F3" \
  --force

Phase 5 - Export (if requested)

cd /Users/varde/code/arxiv-zotero-obsidian && python3 \
  .claude/skills/zotero-report/scripts/export_report.py \
  --input {name}-report.md --format {docx|pdf|hwpx} \
  --output {name}-report.{ext} --language {ko|en}

Mode 2: Collection + Extension

Phase 1a - Collect existing data + search queries

cd /Users/varde/code/arxiv-zotero-obsidian && python3 \
  .claude/skills/zotero-report/scripts/generate_report.py \
  --mode extend --collection "COLLECTION_NAME" --language {ko|en}

Phase 1b - Search arXiv using suggested queries

Read suggested_search_queries from JSON. For each query:

cd /Users/varde/code/arxiv-zotero-obsidian && python3 \
  .claude/skills/arxiv-search/scripts/search_arxiv.py \
  --query "QUERY" --max-results 10 --output json

Phase 1c - Add relevant papers to Zotero

Review results. For papers not already in the collection:

cd /Users/varde/code/arxiv-zotero-obsidian && python3 \
  .claude/skills/zotero-add/scripts/add_to_zotero.py \
  --arxiv-id "ID" --title "TITLE" --authors "AUTHORS" \
  --abstract "ABSTRACT" --published "DATE" \
  --collection "COLLECTION_NAME"

Phase 1d - Re-collect updated collection

cd /Users/varde/code/arxiv-zotero-obsidian && python3 \
  .claude/skills/zotero-report/scripts/generate_report.py \
  --mode collection --collection "COLLECTION_NAME" --language {ko|en}

Phase 2-5: Same as Mode 1

Mode 3: Topic Search from Scratch

Phase 1a - Search arXiv

cd /Users/varde/code/arxiv-zotero-obsidian && python3 \
  .claude/skills/arxiv-search/scripts/search_arxiv.py \
  --query "TOPIC_KEYWORDS" --max-results 20 --output json --sort-by relevance

Phase 1b - Add to Zotero

For each paper in search results:

cd /Users/varde/code/arxiv-zotero-obsidian && python3 \
  .claude/skills/zotero-add/scripts/add_to_zotero.py \
  --arxiv-id "ID" --title "TITLE" --authors "AUTHORS" \
  --abstract "ABSTRACT" --published "DATE" \
  --collection "TOPIC_AS_COLLECTION_NAME"

Phase 1c - Collect data

cd /Users/varde/code/arxiv-zotero-obsidian && python3 \
  .claude/skills/zotero-report/scripts/generate_report.py \
  --mode collection --collection "TOPIC_AS_COLLECTION_NAME" --language {ko|en}

Phase 2-5: Same as Mode 1

Error Handling

  • Collection not found: Ask user to verify collection name
  • arXiv search 0 results: Suggest different keywords
  • Zotero add fails: Skip paper, continue, report failures
  • PDF extraction fails: Use abstract only for summary
  • Export fails: MD file is already saved, check tool installation

Obsidian Note Rules

  • Subfolder name = Zotero collection name (exact match)
  • Use --force to overwrite without prompt
  • Papers without arxiv_id: use zotero key as identifier
  • Papers without abstract: use pdf_text_preview

Known Limitations

  • Linked file attachments: local path must be accessible
  • Scanned PDFs (image-only): OCR not supported, use abstract
  • HWPX export: uses --no-preprocess (no government formatting)
  • non-arXiv papers: zotero_key used as identifier

Agent Orchestration (OMC)

For large collections (50+ papers):

/team 2:executor "batch 1: papers 1-25" "batch 2: papers 26-50"
Then use analyst agent for synthesis.