paper-bib
Skill36 starsChanged 6 months agoMITView on GitHub
Generate verified BibTeX entries from DOI, title, or paper-ref output
In this repository29 other files it gives its agents.
- skills/hpc-monitor/AGENTS.mdAGENTS.md
- aseSkill
- blender-atom-renderSkill
- catagentSkill
- ccel_slide_skillSkill
- computational-section-writingSkill
- design2htmlSkill
- docx-scientific-formattingSkill
- figure_constructionSkill
- hpc-monitorSkill
- html-minimalSkill
- humanizer_engSkill
- humanize-writingSkill
- ko-writingSkill
- rxn-diagram-insetSkill
- matplotlib-scientificSkill
- meetingnote-paperworkSkill
- openrouter-costSkill
- ovito-atom-renderSkill
- paperSkill
- pptx-too-heavySkill
- report_less_slopSkill
- reportSkill
- slide-auditSkill
- smart-compactSkill
- soagentSkill
- transcript2htmlSkill
- youtube2mp4Skill
- youtubeSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
19 rules. About 0 are common, 7 are distinctive, and 12 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈7
Distinctive · estimate
This author's own choices. Worth a look.
12
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 30
If input is a DOI string (matches 10.\d{4,}/\S+), use directly.
- Very specific: line 31
If input is a title, search Crossref: https://api.crossref.org/works?query.title=<URL-encoded-title>&rows=3
- Distinctive: line 33
If no match, warn and ask user to provide DOI manually.
- Very specific: line 34
If input is a /paper-ref table, extract DOI column values.
- Very specific: line 83
Use family and given from Crossref.
- Very specific: line 84
If given is missing, use initials or just family name.
- Distinctive: line 112
If DOI is missing but arXiv ID is available, use:
- Very specific: line 126
If volume, number, or pages are missing, omit those fields (do NOT insert placeholders).
- Very specific: line 127
If year is missing from both published-print and published-online, check created.date-parts.
- Very specific: line 128
Always warn the user about missing fields: ⚠ Missing: volume, pages
- Very specific: line 131
Use @misc with note = {Preprint} and howpublished = {\url{...}} if no journal.
- Very specific: line 134
Before appending to a .bib file, read the file and check if any existing entry has the same DOI.
- Distinctive: line 135
If duplicate found, warn and skip (do not overwrite).
- Very specific: line 143
If user specifies a .bib file path (or one is found in the current project):
- Distinctive: line 144
Read the existing file.
- Distinctive: line 145
Check for duplicate DOIs.
- Distinctive: line 153
When multiple DOIs/titles are provided:
- Distinctive: line 162
Crossref rate limit: Wait and retry once. If still failing, report.
- Very specific: line 168
When receiving output from /paper-ref, parse the markdown table:
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
paper-bib
Generate properly formatted BibTeX entries from DOI, paper title, or /paper-ref output. Verify metadata via Crossref API and optionally append to an existing .bib file.
Input formats
The user may provide one or more of the following:
- DOI — e.g.
10.1038/s41929-023-01045-5 - Paper title — e.g. "Unravelling the role of metal–support interactions..."
- paper-ref-hunter output — a markdown table with columns like Title, DOI, Year, etc.
- Mixed list — multiple DOIs/titles, one per line or comma-separated
Workflow
Step 1. Extract DOIs
- If input is a DOI string (matches
10.\d{4,}/\S+), use directly. - If input is a title, search Crossref:
https://api.crossref.org/works?query.title=<URL-encoded-title>&rows=3- Pick the top result whose title fuzzy-matches (>80% overlap).
- If no match, warn and ask user to provide DOI manually.
- If input is a
/paper-reftable, extract DOI column values.
Step 2. Fetch metadata from Crossref
For each DOI, fetch:
https://api.crossref.org/works/{DOI}Extract from the message object:
type→ determines BibTeX entry type (see mapping below)title[0]→ titleauthor[]→ list of{given, family}pairscontainer-title[0]→ journal namevolume,issue,page→ standard fieldspublished-print.date-parts[0]orpublished-online.date-parts[0]→ yearDOI→ doi fieldpublisher→ publisher (for books/proceedings)URL→ url field
Step 3. Determine entry type
Crossref type | BibTeX type |
journal-article | @article |
proceedings-article | @inproceedings |
book-chapter | @incollection |
book | @book |
posted-content (preprint) | @misc |
report | @techreport |
| other | @misc |
Step 4. Format BibTeX entry
Citation key
Format: {FirstAuthorLastName}{Year}{FirstTitleWord}
- FirstAuthorLastName: ASCII-only, lowercase. Remove diacritics. E.g.
müller→muller. - Year: 4-digit year.
- FirstTitleWord: first significant word of title (skip articles: a, an, the, on, in, of, for).
- Example:
choung2023unravelling
Author format
author = {LastName, FirstName and LastName, FirstName and ...},- Use
familyandgivenfrom Crossref. - If
givenis missing, use initials or just family name. - For consortium/group authors, use
{Organization Name}with braces.
Template
@article{key,
author = {LastName1, FirstName1 and LastName2, FirstName2},
title = {{Title with Braces for Capitalization}},
journal = {Journal Name},
volume = {V},
number = {N},
pages = {start--end},
year = {YYYY},
doi = {10.xxxx/yyyy},
url = {https://doi.org/10.xxxx/yyyy},
}Notes:
- Title wrapped in double braces
{{...}}to preserve capitalization. - Pages use en-dash
--. - Trailing comma after last field (BibTeX tolerates this).
- Two-space indentation for fields.
Step 5. Handle edge cases
ArXiv preprints
- If DOI is missing but arXiv ID is available, use:
@misc{key, author = {...}, title = {{...}}, year = {YYYY}, eprint = {XXXX.XXXXX}, archiveprefix = {arXiv}, primaryclass = {cond-mat.mtrl-sci}, } - Try Crossref first; if 404, try
https://export.arxiv.org/api/query?id_list=XXXX.XXXXX
Missing fields
- If
volume,number, orpagesare missing, omit those fields (do NOT insert placeholders). - If
yearis missing from bothpublished-printandpublished-online, checkcreated.date-parts. - Always warn the user about missing fields:
⚠ Missing: volume, pages
Preprints / posted-content
- Use
@miscwithnote = {Preprint}andhowpublished = {\url{...}}if no journal.
Duplicate detection
- Before appending to a
.bibfile, read the file and check if any existing entry has the same DOI. - If duplicate found, warn and skip (do not overwrite).
Step 6. Output
Default (no .bib file specified)
Print the BibTeX entry to the conversation. Format as a code block.
Append to .bib file
If user specifies a .bib file path (or one is found in the current project):
- Read the existing file.
- Check for duplicate DOIs.
- Append new entries at the end, separated by a blank line.
- Report what was added.
Auto-detect: look for *.bib files in the project root or archive/06_references/.
Batch mode
When multiple DOIs/titles are provided:
- Process each sequentially.
- Collect all entries.
- Print or append all at once.
- Report summary: N entries generated, M skipped (duplicates), K warnings (missing fields).
Error handling
- Crossref 404: DOI not found. Ask user to verify.
- Crossref rate limit: Wait and retry once. If still failing, report.
- Network error: Report and suggest user check connectivity.
- Malformed DOI: Regex-validate before calling API. Strip leading
https://doi.org/if present.
Integration with paper-ref
When receiving output from /paper-ref, parse the markdown table:
- Extract DOI column values.
- Process each DOI through the standard workflow.
- Return BibTeX entries in the same order as the table rows.
Examples
User: /paper-bib 10.1038/s41929-023-01045-5
Output:
@article{choung2023unravelling,
author = {Choung, Seokhyun and Park, Jeong-Myeong and ...},
title = {{Unravelling the role of metal--support interactions ...}},
journal = {Nature Catalysis},
volume = {6},
pages = {1082--1093},
year = {2023},
doi = {10.1038/s41929-023-01045-5},
url = {https://doi.org/10.1038/s41929-023-01045-5},
}User: /paper-bib "machine learning interatomic potentials" --file refs.bib
→ Search title on Crossref → fetch top match → format → append to refs.bib.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

