agentleFS
s-choungs-choung/Research-Skills/skills/paper-bib/SKILL.md

paper-bib

Skill36 starsChanged 6 months agoMITView on GitHub

Generate verified BibTeX entries from DOI, title, or paper-ref output

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
  1. Very specific:

    If input is a DOI string (matches 10.\d{4,}/\S+), use directly.

    line 30
  2. Very specific:

    If input is a title, search Crossref: https://api.crossref.org/works?query.title=<URL-encoded-title>&rows=3

    line 31
  3. Distinctive:

    If no match, warn and ask user to provide DOI manually.

    line 33
  4. Very specific:

    If input is a /paper-ref table, extract DOI column values.

    line 34
  5. Very specific:

    Use family and given from Crossref.

    line 83
  6. Very specific:

    If given is missing, use initials or just family name.

    line 84
  7. Distinctive:

    If DOI is missing but arXiv ID is available, use:

    line 112
  8. Very specific:

    If volume, number, or pages are missing, omit those fields (do NOT insert placeholders).

    line 126
  9. Very specific:

    If year is missing from both published-print and published-online, check created.date-parts.

    line 127
  10. Very specific:

    Always warn the user about missing fields: ⚠ Missing: volume, pages

    line 128
  11. Very specific:

    Use @misc with note = {Preprint} and howpublished = {\url{...}} if no journal.

    line 131
  12. Very specific:

    Before appending to a .bib file, read the file and check if any existing entry has the same DOI.

    line 134
  13. Distinctive:

    If duplicate found, warn and skip (do not overwrite).

    line 135
  14. Very specific:

    If user specifies a .bib file path (or one is found in the current project):

    line 143
  15. Distinctive:

    Read the existing file.

    line 144
  16. Distinctive:

    Check for duplicate DOIs.

    line 145
  17. Distinctive:

    When multiple DOIs/titles are provided:

    line 153
  18. Distinctive:

    Crossref rate limit: Wait and retry once. If still failing, report.

    line 162
  19. Very specific:

    When receiving output from /paper-ref, parse the markdown table:

    line 168

≈ “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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

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:

  1. DOI — e.g. 10.1038/s41929-023-01045-5
  2. Paper title — e.g. "Unravelling the role of metal–support interactions..."
  3. paper-ref-hunter output — a markdown table with columns like Title, DOI, Year, etc.
  4. 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-ref table, 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] → title
  • author[] → list of {given, family} pairs
  • container-title[0] → journal name
  • volume, issue, page → standard fields
  • published-print.date-parts[0] or published-online.date-parts[0] → year
  • DOI → doi field
  • publisher → publisher (for books/proceedings)
  • URL → url field

Step 3. Determine entry type

Crossref typeBibTeX 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 family and given from Crossref.
  • If given is 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, or pages are missing, omit those fields (do NOT insert placeholders).
  • If year is missing from both published-print and published-online, check created.date-parts.
  • Always warn the user about missing fields: ⚠ Missing: volume, pages

Preprints / posted-content

  • Use @misc with note = {Preprint} and howpublished = {\url{...}} if no journal.

Duplicate detection

  • Before appending to a .bib file, 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):

  1. Read the existing file.
  2. Check for duplicate DOIs.
  3. Append new entries at the end, separated by a blank line.
  4. 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:

  1. Process each sequentially.
  2. Collect all entries.
  3. Print or append all at once.
  4. 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.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.