| name | paper-readers-guide |
| description | Generate a treasure-hunt style reading guide for an academic paper โ a typeset PDF of 20 quest questions that pulls the reader through the paper. Use when the user has a paper PDF and wants a reading guide, study guide, reading quest, questions to work through while reading, or "help me actually read this paper" โ English or Korean output. |
Paper Reader's Guide
Turn any academic paper into a playful-but-rigorous reading quest. The output is a typeset PDF with 20 treasure-hunt style questions that pull the reader through the paper from opening hook to critical reflection.
What this skill produces
A single-file Typst document compiled to PDF, containing:
- Cover block โ paper title, authors, venue, year, and a 2โ3 sentence TL;DR teaser that sets the stage without spoiling the main result.
- Reading roadmap โ a short suggested path through the paper: what to skim, what to read closely, where to slow down, where to re-read.
- Three-level quest sheet โ 20 questions split as 8 / 8 / 4 across three thematic levels, each in a format matched to its purpose (see below).
- Closing note โ a light encouragement plus a "share what you found" prompt.
The three quest levels
Treasure hunt, not exam. Every question points at a concrete target in the paper and is phrased to motivate the reader to go look.
Level 1 โ Scout the Terrain (8 MC, 5 options). Pulls readers across the paper's surface: abstract, methods, figures, results, discussion, supplementary. Coverage target: ~2 abstract/intro, 1โ2 methods, 2โ3 results/figures (different figures), 1 discussion, 1 supplementary/tables/bibliography. Numeric-retrieval cap: max 2 of 8 โ the rest should ask about named mechanisms, specific figure panels, chosen methods/tools, limitations, prior references, etc.
Level 2 โ Decode the Map (8 short-answer). One-sentence answers that stitch pieces together. Coverage target: 2 on logical flow, 2 on methodological choices, 2 on figuresโclaim laddering, 1 cross-paper, 1 prior-work. The template gives exactly two ruled lines โ if your answer needs a paragraph, rewrite the question.
Level 3 โ Face the Dragon (4 open-ended). Real critical provocations, not generic extensions. Coverage target: 1 hidden/under-defended assumption, 1 missing experiment/control/ablation, 1 relation to the wider field (contradicts / confirms / complicates), 1 practical or conceptual limit.
Shared rules (all levels). Specific and concrete โ cite ยง/figure/equation. Motivating, not evaluative โ "according to the paperโฆ", "the authors hide in ยง4โฆ". Vary the surface across numbers, figures, sentences, and relationships.
L1 distractor rules. All five options plausible at first glance; ideally drawn from the paper itself but answering a different question. Mix the position of the correct answer across aโe. No "None of the above" / "All of the above". Never reveal the answer in the guide.
See references/question_patterns.md for worked examples across fields and all three formats.
Workflow
Step 1 โ Confirm language with the user
Use the AskUserQuestion tool (not prose) with two options: English and Korean. If the user has been clearly writing in Korean, you may pre-select Korean as the default โ still confirm.
If Korean is selected: all technical and academic terms stay in English โ method names, gene/protein names, statistical terms (p-value, ROC, โฆ), model/dataset names, jargon (CRISPR, transformer, โฆ). Only prose connectors and quest narration are Korean. See references/korean_localization.md for examples.
Step 2 โ Delegate paper reading to a subagent (call exactly once)
Do not Read the full paper yourself. Papers run 30โ100k tokens; loading one into your own context inflates every downstream step. Instead, extract the paper and hand it to a subagent that writes a compact digest to disk.
First, extract the paper to markdown (uses markitdown, which preserves headings, lists, and tables better than a plain text dump):
python scripts/extract_pdf.py <paper.pdf> > <working_dir>/paper.md
Then spawn a subagent once via the Agent tool (general-purpose subagent is fine). Instruct it to:
- Read
<working_dir>/paper.md (and the supplementary sections if present).
- Write the digest to
<working_dir>/paper_digest.md using the section shape below.
- Return only a short confirmation โ e.g.
"wrote paper_digest.md, N sections, M bytes". The digest itself should stay on disk, not flow back through the subagent's response.
The digest must have exactly these sections, in plain Markdown under ~600 lines total:
- One-paragraph TL;DR โ what the paper claims and why it matters. No spoilers worth more than a sentence.
- Key numbers โ 10โ20 numeric facts with โค10 words of context each (used for L1 numeric distractors and correct answers). Format:
value ยท context ยท location.
- Figure inventory โ every main figure and notable supplementary figure: figure number, one-line caption of what it actually shows, what claim it supports.
- Methodological choices โ 5โ10 bullets: the method/model/tool/control/dataset the authors picked and (briefly) why, including named alternatives they did not pick.
- Central claim chain โ the logical ladder from background โ hypothesis โ key experiments โ main result โ interpretation, in 6โ12 lines.
- Limitations and open flanks โ hidden assumptions, missing controls/ablations, limits the paper acknowledges, tensions with prior work. Be specific: cite ยง/figure where possible.
- Prior-work anchors โ 3โ6 references the paper frames itself against, with one-line "what this paper says about them".
- Paper anatomy skeleton โ a proposed node+edge layout for the anatomy graph (see Step 4 schema for node
kind values and the edge format). The subagent suggests the structure; you refine it in Step 4.
Tell the subagent to be specific and concrete (cite ยง/figure numbers, exact numeric values, exact phrasings of claims) and to include supplementary material if present.
Token-cost rules โ follow these strictly.
- Call the subagent exactly once per paper. Every fresh
Agent call re-reads the entire paper โ the paper tokens are billed again on the subagent side each time. One comprehensive digest is far cheaper than three narrow ones.
- Use the digest file as the canonical artifact.
Read paper_digest.md when you need it, and let your own context drop it between turns; re-reading a local file is free compared to re-spawning the subagent.
- If the digest lacks a specific detail, don't re-spawn the subagent. Use
Grep on paper.md for the exact term, then Read only the matching line range. This costs you a few hundred tokens instead of another full-paper pass.
- Only spawn a second subagent as a last resort, e.g. when the paper's actual structure turns out to be very different from what the first digest assumed. If you do, ask it to append to
paper_digest.md rather than start over.
You will use the digest as the sole input to Steps 3 and 4 โ the raw paper never enters your context.
Step 3 โ Draft the 20 questions
Work the question-crafting rules above. Lay out the 8 / 8 / 4 split. For Level 1, write the correct answer first, then write 4 plausible distractors (ideally from the paper). For Level 2, make sure each question is genuinely answerable in one sentence โ if the answer would run longer, trim the question. After drafting, re-read and cull anything that feels generic.
Step 4 โ Write the content JSON
You do not edit any Typst files per paper. Author a single content.json that describes paper metadata, roadmap, the 20 questions, closing, and the anatomy graph. build_guide.py turns it into a PDF.
Get the full schema reference on demand (instead of keeping it in your context):
python scripts/render_content.py --print-schema
And the canonical filled-in example lives at assets/content_example.json โ read it once if you need a concrete layout. Top-level shape at a glance:
{ lang, asset_dir, paper, roadmap, level1, level2, level3, closing, paper_anatomy }
Key constraints:
level1.questions must have 8 items, each with exactly 5 options.
level2.questions has 8 items; level3.questions has 4. Each is {text, hint}.
paper_anatomy.nodes[*].kind is one of the nine labels listed in the schema; pos is [x, y] in grid units; edges are [from, to] or [from, to, "dashed"].
- Typst markup (
_italic_, *bold*) works in tldr, roadmap, closing, question text, each option, every hint, and anatomy node label. Never use **bold** โ that's Markdown.
- You can leave
asset_dir as "." โ build_guide.py overrides it to stage assets correctly.
Design the anatomy graph from the paper's actual logical structure โ not a placeholder. The shape should mirror the argument: parallel experimentโevidence tracks converging on a supporting spine, a linear chain, or a branching Y. Keep labels โค ~12 words and the graph โค ~18 nodes.
Flip lang to "ko" for a Korean guide. The engine switches headings, the how-to-use copy, anatomy-node kind labels, and the font stack accordingly. Keep technical/English terms in English (see references/korean_localization.md).
Step 5 โ Build the PDF
One command. build_guide.py renders the JSON to a Typst file, stages the template and asset files, and compiles to PDF โ all in one shot:
python scripts/build_guide.py <working_dir>/content.json <output.pdf>
It also warns if the 8/8/4 question split is off. Korean fonts and Goonies-mood illustrations are auto-staged from the skill's assets/ folder, so Korean output renders correctly even in sandboxes without system CJK fonts.
Step 6 โ Present the PDF to the user
Use the present_files tool (Cowork) or link the file directly (Claude Code). Include a brief one-line summary โ the user is about to look at the PDF themselves.
Reference files
references/question_patterns.md โ worked examples for each of the three formats, across different fields, with commentary on why each works (and why weak ones fail).
references/korean_localization.md โ rules for Korean output: which terms to keep in English, example sentences, punctuation conventions.
references/typst_styling.md โ notes on modifying the template (page color, accent, fonts) if the user asks for customization.
Assets and scripts
assets/content_example.json โ a filled-out placeholder JSON showing the exact structure the renderer expects. Use it as the schema reference when authoring content.json.
assets/template.typ โ the rendering engine (layouts, styling, localized strings, Fletcher anatomy renderer, quest-box components). Exposes render_guide(...). Do not read this file into context โ treat it as an opaque library. build_guide.py stages it automatically; only touch it for visual customization.
assets/img-{cover,roadmap,level1,level2,level3,finished}.jpeg โ Goonies-mood illustrations for the cover, roadmap inset, level openers, and closing scene.
assets/SeedKRex-*.otf โ bundled Korean font family (Regular / Regular Italic / Bold / Bold Italic) so Korean guides render with proper Korean typography and italic/bold emphasis, even in sandboxes without system CJK fonts. The engine's Korean font stack is ("SeedKRex", "Lato").
scripts/extract_pdf.py โ pulls Markdown-formatted text from the input PDF using markitdown.
scripts/render_content.py โ turns content.json into a filled paper_content.typ. Supports --print-schema to print the schema reference on demand. Keeps the Typst template out of your model context.
scripts/compile_guide.py โ low-level TypstโPDF compiler with the bundled font path.
scripts/build_guide.py โ one-shot wrapper: renders JSON, stages assets, and compiles in a single invocation. Use this from Step 5.
Common pitfalls to avoid
- Spoilers in the TL;DR. Make the reader want to find the answer, don't hand it over.
- Bunching L1 questions in one section. If all 8 come from the abstract, you've failed the "pull them through the paper" objective.
- Shallow L3 provocations. "How would you extend this work?" is weaker than "Figure 4's claim rests on an assumption stated only in ยง2.1 โ is it defensible?"
- Editing generated files. Never edit
paper_content.typ โ it's overwritten. Edit content.json and re-run build_guide.py.