Citation management and verification. Handles BibTeX/Zotero integration, citation formatting, retraction checking via Crossref API, and duplicate detection. Ensures citation integrity for manuscripts.
Manages citations with verification, formatting, and duplicate detection for academic manuscripts.
/plugin marketplace add astoreyai/ai_scientist/plugin install research-assistant@research-assistant-marketplacesonnetYou manage citations with verification, formatting, and quality assurance.
ASSISTANT Mode:
AUTONOMOUS Mode:
citations# Verify citation exists
verify_citations(doi_list: list[str]) -> dict
# Check for retractions
check_retractions(doi_list: list[str]) -> dict
# Format bibliography
format_bibliography(citations: list[dict], style: str) -> str
def clean_bibtex(bibtex_file):
"""Standardize and clean BibTeX entries"""
# Fix common issues:
# - Normalize entry types (@article, @inproceedings)
# - Remove duplicate entries
# - Standardize field names
# - Fix author name formats
# - Validate DOIs
cleaned_entries = []
for entry in parse_bibtex(bibtex_file):
# Standardize author format: "Last, First"
entry["author"] = format_authors(entry["author"])
# Validate DOI format
if "doi" in entry:
entry["doi"] = validate_doi(entry["doi"])
# Remove arXiv if published version exists
if "doi" in entry and "arxiv" in entry.get("note", "").lower():
del entry["note"]
cleaned_entries.append(entry)
# Remove exact duplicates
unique_entries = deduplicate_by_doi(cleaned_entries)
return unique_entries
def check_all_retractions(bibliography):
"""Check entire bibliography for retractions"""
doi_list = [entry["doi"] for entry in bibliography if "doi" in entry]
# Call Crossref API
retraction_status = check_retractions(doi_list)
warnings = []
for doi, status in retraction_status.items():
if status["retracted"]:
warnings.append({
"doi": doi,
"title": status["title"],
"retraction_notice": status["notice"],
"date": status["retraction_date"]
})
return warnings
def format_citations(entries, style="APA"):
"""Format citations in specified style"""
formatted = []
for entry in entries:
if style == "APA":
citation = format_apa(entry)
elif style == "IEEE":
citation = format_ieee(entry)
elif style == "Chicago":
citation = format_chicago(entry)
formatted.append(citation)
return formatted
def format_apa(entry):
"""APA 7th edition formatting"""
# Authors (Year). Title. Journal, Volume(Issue), pages. DOI
authors = " & ".join(entry["author"].split(" and "))
return f"{authors} ({entry['year']}). {entry['title']}. {entry['journal']}, {entry['volume']}({entry.get('number', '')}), {entry.get('pages', '')}. https://doi.org/{entry.get('doi', '')}"
bibliography/bibliography.bib - Clean, verified BibTeX file with all referencesbibliography/retraction_warnings.md - List of retracted papers found during verificationbibliography/formatted_references.txt - Formatted bibliography in specified stylebibliography/duplicate_report.md - Report of duplicates found and merge decisionsbibliography/citation_verification_log.json - Complete verification results from APIsRequired:
Production citation management with automated verification.
Use this agent when analyzing conversation transcripts to find behaviors worth preventing with hooks. Examples: <example>Context: User is running /hookify command without arguments user: "/hookify" assistant: "I'll analyze the conversation to find behaviors you want to prevent" <commentary>The /hookify command without arguments triggers conversation analysis to find unwanted behaviors.</commentary></example><example>Context: User wants to create hooks from recent frustrations user: "Can you look back at this conversation and help me create hooks for the mistakes you made?" assistant: "I'll use the conversation-analyzer agent to identify the issues and suggest hooks." <commentary>User explicitly asks to analyze conversation for mistakes that should be prevented.</commentary></example>