skills/paper-three-pass-extraction/SKILL.md
Domain-neutral methodology for autonomously extracting structured notes from a single academic paper via three escalating passes. Pass 1 (inspectional, ~10-15 min) reads title, abstract, intro, section headings, conclusion, references at a glance, then applies the Five Cs framework (Category, Context, Correctness, Contributions, Clarity). Pass 2 (content grasp, ~30-60 min) reads the full paper skipping proofs, answers main-argument / Big-Question / hypotheses / figure-by-figure / references / confusions. Pass 3 (deep understanding, ~1-4 hours, reserved for important papers) virtually re-implements, challenges every assumption, identifies what is NOT said, asks the falsifiability question. The methodology is internal to the agent applying it - questions are answered against the paper's content, never asked of the operator. Inspired by Keshav 2007 ("How to Read a Paper") and Adler-style inspectional reading. Use when an extraction agent needs to convert dense academic prose into structured machine-and-human-readable notes - bio papers, CS papers, ML papers, statistics, math, any field.
npx skillsauth add lyndonkl/claude paper-three-pass-extractionInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Three-pass methodology for extracting structured notes from a single academic paper. Each pass escalates from cheap-and-shallow to expensive-and-deep; downstream agents trigger Pass 2 only for relevant papers and Pass 3 only on explicit operator request.
The central principle: every question in this methodology is answered by the agent reading the paper, against the paper's content. Never ask the operator the questions. Never have a Socratic dialogue. The questions are an internal extraction checklist whose purpose is to produce structured output — not user-facing prompts.
- [ ] Pass 1: Inspectional reading (always run)
- Read title, abstract, intro paragraphs, section headings, conclusion, references at a glance
- Apply the Five Cs framework
- Produce Pass 1 extraction output
- [ ] Pass 2: Content grasp (run when escalated, e.g., paper passed relevance filter)
- Acquire full text (PDF or HTML); flag if unavailable
- Read linearly, skipping proofs and heavy derivations
- Answer the Pass 2 question set
- Append Pass 2 extraction output
- [ ] Pass 3: Deep understanding (run only on operator request)
- Re-read methods + proofs that Pass 2 skipped
- Virtually re-implement the core idea
- Answer the Pass 3 question set
- Append Pass 3 extraction output
Operates on title, abstract, intro paragraphs, section headings, conclusion, and references at a glance. Never blocks on a missing PDF — abstract-only Pass 1 is acceptable.
Category — What type of paper is this? Pick the most specific applicable label: empirical study, theoretical analysis, system / architecture description, benchmark, survey / review, meta-analysis, position / perspective, replication, ablation study, dataset release, methods paper, case report. If the paper fits two, pick the dominant frame from the abstract; note the secondary in parentheses.
Context — What prior work does it build on? What field or debate does it sit within? Look for: explicit citations in the abstract, "extends [X]" / "improves on [X]" phrasing, the institutional / lab pattern in the author list, key references repeated. Output: 1-2 sentences naming the closest prior work and the active debate.
Correctness (first-glance) — Do the assumptions seem reasonable at first glance? This is not a deep critique — Pass 1 hasn't read the methods. Flag obvious issues: claims that contradict well-known results, conclusions that overreach the evidence cited in the abstract, missing comparisons. If nothing obvious, write "no first-glance concerns."
Contributions — What does the paper claim to add? Quote or paraphrase the abstract's contribution claim. Distinguish: new method / new result / new dataset / new framing / negative result / replication. Preserve hedging: if the abstract says "suggests" or "is consistent with," the extraction says the same. Never promote a "suggests" to a "shows."
Clarity — Is the abstract / structure well-written? Does the title match the abstract? Are claims specific or vague? Output: short signal — clear, dense-but-clear, vague, mismatched-title, acronym-soup. This guides whether Pass 2 will be easy or painful.
one_line summaryA single-sentence compression of "what the paper does." Used by upstream callers for quick reporting. Shouldn't exceed ~30 words.
Runs when the caller escalates (typical trigger: paper passed a relevance filter as KEEP). Reads the full paper, skipping proofs and heavy derivations. Needs the full-text source.
Main argument and supporting evidence — 3 to 5 sentences. What does the paper argue, and what does it adduce as support? Resist re-stating the abstract; this should reflect the actual structure of the paper as you read it.
The Big Question. Not what the paper is about — what problem the field is trying to solve, of which this paper is one move. Often inferable from the introduction's framing of related work.
Specific hypotheses tested. List them. If the paper is a systems / engineering paper without explicit hypotheses, list the design claims being defended instead.
Unfamiliar terms / concepts requiring gloss for a non-specialist reader. These will become candidates for inline glossing in any downstream summary.
Figure-by-figure analysis. For each figure or table that carries the argument: what is being shown, what's the takeaway, are axes / error bars / sample sizes clean. Skip ornamental figures.
References worth follow-up. Distinguish load-bearing references (the result depends on them) from background citations.
Confusions or unresolved points. What did not land for you on this read? Mark them — Pass 3 (if escalated) will return to them.
The agent has to actually fetch the full text — not just say it tried. WebFetch is HTML→markdown only; it does not handle PDFs. The reliable recipe uses the calling agent's Bash and Read tools together: curl the PDF to a local cache path, then read it with the Read tool's pages parameter (max 20 pages per call).
1. Construct a local cache path:
pdf_cache = {output_root}/.cache/pdfs/{paper_slug}.pdf
(or whatever cache convention the calling workflow uses; the cache should
be gitignored so PDFs don't get committed)
2. Ensure the cache directory exists:
Bash: `mkdir -p {output_root}/.cache/pdfs`
3. Try sources in order. STOP at the first one that succeeds.
Source 1 (preferred) — direct PDF download via Bash + curl:
`curl -L --max-time 60 --fail -sS -o {pdf_cache} "{pdf_url}"`
Non-zero exit code → curl failed (404, network, redirect loop). Move on.
Zero exit → continue to step 4.
Source 2 (HTML fallback) — WebFetch on the abstract page URL:
WebFetch returns markdown. Accept only if length > ~5K chars and the
result clearly contains methods + results sections (not just the abstract).
Otherwise treat as "abstract page only" and move on.
Source 3 (PubMed PMC OA fallback):
Only attempts when source == "pubmed" and a PMC id is present in the
paper_record. Apply Source 1's curl recipe to the PMC PDF URL:
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC{pmc_id}/pdf/
4. Read the full text:
For PDF cache files, use Read({file_path: pdf_cache, pages: "1-20"}).
Continue with pages "21-40", "41-60" etc. until you reach the references
or the file ends. Most papers fit in one call.
For Source 2 HTML, use the WebFetch result directly.
5. Failure mode — if all three sources fail:
Mark full_text_available=false and proceed in reduced-confidence mode.
Pass 2 still runs on abstract + (when accessible) intro paragraphs, but
each affected answer is tagged "(abstract-only; full text unavailable)"
and the figure-by-figure question is skipped entirely. Degraded Pass 2
still beats no Pass 2 for downstream synthesis.
The calling agent's required tools for this recipe: Bash (for mkdir -p and curl), Read (for PDF ingestion with the pages parameter), and WebFetch (for the HTML fallback). Skill callers without one of these cannot execute the recipe and should fall back to abstract-only mode explicitly.
full_text_available=false is the honest answerMost PubMed records are paywalled outside PMC OA. arXiv, bioRxiv, and medRxiv all serve open PDFs. If a calling workflow is reporting full_text_available=false for arXiv or preprint records, something is wrong — verify the recipe was actually run (curl exit code observed; Read attempted on the cached file) before accepting the false flag.
Runs only on explicit operator request. Time investment: 1-4 hours of agent compute equivalent. Reserved for high-priority papers. Never auto-trigger.
Reconstruct the structure and argument from memory. Force a from-memory write: the structure of the paper, the argument's flow, the key results, in your own organization. If you cannot reconstruct, you don't yet understand it — return to Pass 2.
Strongest points; weakest points. Be specific. "The benchmark is standard" is weak praise; "the multi-seed protocol with seeds disclosed in the appendix is unusually rigorous" is real. Same for weaknesses.
Falsifiability — what would have to be true for the conclusions to be wrong? This is the highest-value question in deep reading. Surface the load-bearing assumptions whose failure would invalidate the result.
What is not said? Hidden assumptions, missing comparisons, citations that should appear but don't, methodological choices that aren't justified.
Future work this opens up. Concrete next experiments or follow-up questions, not vague "more research needed."
Pass 1 on every fetched paper (cheap; runs in parallel as subagent batch). Apply the relevance filter on the Pass 1 outputs (richer signal than abstracts alone — the Five Cs answers improve criteria-fit scoring). Pass 2 on the KEEPs. Pass 3 only when the operator points at a specific paper from the digest.
Operator drops a paper into a focused-review workflow. Run all three passes sequentially, returning each pass's output. Pass 3 is on the table because there's only one paper to invest in.
Operator has 50 papers in a backlog. Pass 1 on all 50 (fast); rank by Pass 1 signals (Category fit, hedging strength, Clarity); recommend top-N for Pass 2.
Two papers claim contradictory results. Pass 2 on both with explicit attention to: methodology differences in question 1, hypothesis-testing protocol in question 3, figure protocol differences in question 5. Pass 3 on whichever is the higher-priority claim.
(not stated) when uncertain — that's high-information.| Pass | Time | Trigger | Input | Output | | ---- | --------- | -------------------------------------- | ---------------------------------------- | ----------------------------------------------- | | 1 | ~10-15min | Always (every paper) | Title, abstract, intro, headings, conclusion | Five Cs answers + one_line summary | | 2 | ~30-60min | Caller escalates (filter KEEP) | Full paper text (PDF or HTML), skip proofs | Pass 2 question-set answers, figure analysis | | 3 | ~1-4h | Operator request only — never auto | Full paper including methods + proofs | Reconstruction, strongest/weakest, falsifiability, what-is-not-said, future work |
layered-reasoning — the three passes are themselves a layered structure (inspectional / content / deep). Apply layered-reasoning's consistency checks across passes.scientific-clarity-checker — directly applicable to Pass 1's Clarity assessment and Pass 2's main-argument-vs-evidence check.research-claim-map — applicable to Pass 2's reference triage (load-bearing vs background) and Pass 3's source grading.hypotheticals-counterfactuals — drives Pass 3's falsifiability question.negative-contrastive-framing — drives Pass 3's "what is not said."skill-creator/resources/inspectional-reading.md — the kindred-spirit predecessor scoped to skill creation; same Adler-style reading discipline applied to a different artifact (source documents for skill extraction rather than research papers).skill-creator/resources/synthesis-application.md — same lineage; provides the completeness-and-logic check pattern that Pass 3's "what is not said" extends.A structured markdown file accumulating each pass's output. Multiple passes append; never overwrite a prior pass section. The file is the artifact downstream agents (synthesizer, archiver, search) consume.
development
--- name: zettel-note description: The note-writing discipline for this vault's evergreen knowledge graph, modeled on a Zettelkasten reading companion and governed by the vault conventions. Enforces declarative-claim titles, one claim per note (atomicity), own-words prose with no block quotes, the piped [[slug|Title]] link form, the labeled link-relationship vocabulary (Confirms/Contradicts/Extends/Context/Prerequisite/Builds-on/Applies/Example-of/Contrasts-with), 3-6 links per note, and search-
development
Plans between-round FIFA World Cup Fantasy transfers — budgets the round's free transfer(s), forces out players whose nation has been eliminated, chases fixture-swing drops, upgrades on value, and decides when a rebuild is large enough to fire the Wildcard instead of spending free transfers one at a time. Ranks candidate in/out pairs by EV gain over each player's remaining survival horizon (delta xEV weighted by progression_carry) MINUS transfer cost (a free transfer is cheap, a points hit is real, churning the squad for marginal swings is a critic flag), and tags forced/fixture/upgrade priority. Emits a `transfer-plan` signal. Use when called by wc-squad-architect (whose transfer work this skill is the engine for) and by the strategists in the populate stage when their candidate is transfer-adjacent rather than a full rebuild.
testing
Reads and updates the FIFA World Cup Fantasy tournament state machine (footballfantasy/context/tournament-state.md) — the temporal backbone tracking phase (pre-tournament → group MD1-3 → R32 → R16 → QF → SF → final), budget ($100m group / $105m knockouts), nation cap (3 group, loosening in knockouts), chips remaining, surviving nations, each owned player's elimination-risk horizon, and deadlines. Validates state on load (count/feasibility checks), applies phase transitions, and appends to the append-only state log (never silent overwrite). Use to load state at the start of a run and to commit state changes after the manager makes a move.
development
Validates and persists FIFA World Cup Fantasy signal files to signals/YYYY-MM-DD-<type>.md. Checks the required frontmatter (type, round, date, emitted_by, confidence, source_urls), range-checks declared numeric signals, confirms every factual claim carries a source URL or "manager-provided", rejects unknown signal types, and refuses to persist a signal that fails validation (logging the failure instead). Keeps the inter-agent signal layer auditable so downstream agents can trust what they read and never re-derive it. Use whenever an agent or skill writes a signal.