From research-papers
Lists unprocessed PDFs in papers/ root via ls and batch processes them by invoking paper-reader skill on each, parallelizing with subagents if available or sequentially.
npx claudepluginhub ctoth/research-papers-plugin --plugin research-papersThis skill uses the workspace's default tool permissions.
Find and process all unprocessed PDFs in `papers/` root.
Extracts 'New Leads' cited papers from collection notes and Semantic Scholar citation graphs, then retrieves and reads them via paper-process. Supports --all, limits, and --parallel subagents.
Orchestrates parallel paper processing by splitting into H1 sections and dispatching subagents to run skills like polish, translation, de-ai on .tex or .md files.
Dispatches parallel subagents to screen 50+ papers from PubMed, perform deep dives, extract data, and explore citations for large literature reviews.
Share bugs, ideas, or general feedback.
Find and process all unprocessed PDFs in papers/ root.
Default execution mode:
This skill is a batch wrapper around paper-reader. It does not initialize or mutate propstore source branches.
This skill is a checklist, not an outcome sketch.
paper-reader, do that. If you cannot, use the fallback helper below and follow its stdout literally.paper-reader for each PDF, using subagents if available.A PDF in papers/ root (e.g. papers/something.pdf) is unprocessed. Once paper-reader processes it, the PDF is mv'd into a subdirectory (e.g. papers/Author_Year_Title/paper.pdf). So ls papers/*.pdf gives you the to-do list.
ls papers/*.pdf 2>/dev/null
If no PDFs found, report "No unprocessed papers found" and stop.
Otherwise, list what was found:
Found N unprocessed paper(s):
1. papers/filename1.pdf
2. papers/filename2.pdf
...
Required control flow:
paper-reader for that PDF, or use the fallback helper below if nested skill invocation is unavailable.For each PDF found, invoke the paper-reader skill:
$paper-reader papers/filename.pdf
If explicit skill invocation is not available, follow the paper-reader SKILL.md instructions directly for each PDF. The paper-reader skill handles:
IF SUBAGENTS ARE AVAILABLE, PARALLELIZE THE PAPER READING PROCESS IMMEDIATELY AFTER STEP 1.
Do not trade away extraction quality for speed: never use a mini/small/flash tier model for any worker that will run paper-reader.
Do not pause to inspect tool availability, existing paper directory formats, or sample notes before starting the workers unless a worker reports a concrete blocker.
If nested skill invocation is unavailable or unreliable on this platform, derive this skill's
installed directory from the injected <path>, then ensure the subagent (or you if subagents are unavailable) runs:
uv run "<skill-dir>/../paper-reader/scripts/emit_nested_reader_fallback.py"
Read the FULL stdout and follow it exactly for the current PDF instead of opening
paper-reader/SKILL.md piecemeal.
Anti-patterns to avoid:
After all papers are processed:
Processed N paper(s):
1. papers/filename1.pdf -> papers/Author_Year_Title/
2. papers/filename2.pdf -> papers/Author_Year_Title/
...
Remaining unprocessed: [ls papers/*.pdf output, or "none"]
Already-processed PDFs: If paper-reader detects a paper is already complete, it will delete the duplicate root PDF and move on. This is expected behavior.
reconcile needed: paper-reader already invokes reconcile as part of its flow (Step 7.5) but you may need to do again at the end.