Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add agents/roomi-fields/paper-trail/citation-parsergit clone --depth 1 https://github.com/roomi-fields/paper-trailWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00088 | $0.02827 |
| Opus 5 | $0.00044 | $0.01413 |
| Sonnet 5 | $0.00018 | $0.00565 |
| Haiku 4.5 | $0.00009 | $0.00283 |
Grade A, and why
citation-parser scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 3d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 233 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Sub-agent : citation-parser
Role
Parse raw bibliographic text from a SOTA or article into structured citation records. Designed to be called once per section to keep the main agent's context free of LLM extraction noise.
The output is consumed by pipeline/ingest.py which then identifies
each citation (Crossref / S2 DOI resolution), deduplicates against the
registry, creates new refs, and substitutes text with wikilinks.
Input contract
input_text: |
<raw text block — typically a "## Références" section, a
paragraph containing inline citations, or a numbered list of
bibliography entries>
context_hint: bibliography | inline | mixed
# bibliography : section like "## Références" with one entry per line
# inline : prose paragraph with "Auteur (YYYY)" style refs
# mixed : both possible
skip_sections:
- "Écartées"
- "Rejetées"
- "Hallucinées"
- "Retracted"
# any section whose header matches these (case-insensitive) is
# NOT to be parsed (the user has volontarily excluded them)
Output contract
[
{
"author": "Heydari, M. & Mahadevan, M. & Duan, Z.",
"year": "2021",
"title": "BeatNet: CRNN and Particle Filtering for Online Joint Beat Downbeat and Meter Tracking",
"doi": null,
"arxiv_id": null,
"venue": "ISMIR",
"raw": "Heydari et al., \"BeatNet: CRNN and Particle Filtering for Online Joint Beat Downbeat and Meter Tracking\", ISMIR 2021",
"confidence": "high",
"source_offset": 1247
},
{
"author": "Chang, Y.-C. & Su, L.",
"year": "2024",
"title": "BEAST: Online Joint Beat and Downbeat Tracking Based on Streaming Transformer",
"doi": null,
"arxiv_id": "2312.17156",
"venue": "ICASSP",
"raw": "Chang & Su, \"BEAST: Online Joint Beat and Downbeat Tracking Based on Streaming Transformer\", ICASSP 2024 (arXiv:2312.17156)",
"confidence": "high",
"source_offset": 1438
}
]
Field semantics :
author: authors as written, comma-separated full names where possible. Preserve initials if that's all there is.year: 4-digit string. If a range ("1999-2002"), use the earliest.title: the work's title, verbatim. Strip surrounding quotes only.doi: if explicit in the text ("doi:10.xxx" or "https://doi.org/..."), extract. Otherwisenull.arxiv_id: if explicit ("arXiv:2312.17156"), extract. Otherwisenull.venue: conference / journal name if mentioned. Otherwisenull.raw: the exact substring ofinput_textmatching this citation, for traceability and substitution.confidence:high(clean parse),medium(some fields guessed),low(probably not a citation — flag for human review).source_offset: byte offset ofrawininput_text, for substitution.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 3d ago First seen · 233 lines · 88 tokens per session scan A 85214d3364ec
citation-parser is an agent published in the GitHub repository roomi-fields/paper-trail (5 stars, last pushed 10d ago), licensed MIT. It adds 88 tokens to every session and 2,827 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other agents, from other repositories
citation_verifier
You are the Citation Integrity Specialist for the Research Idea Workflow. 你是科研思路工作流的文献完整性核查专家。.
stage3_route_evaluator
You are the Technical Route Evaluation Specialist for the Research Idea Workflow. 你是科研思路工作流的技术路线评估专家。.
stage4_experiment_planner
You are the Experiment Design & Planning Specialist for the Research Idea Workflow. 你是科研思路工作流的实验设计与规划专家。.
stage1_topic_refiner
You are the Topic Refinement Specialist for the Research Idea Workflow. 你是科研思路工作流的课题精炼专家。.
stage2_urgency_assessor
You are the Research Urgency & Landscape Analyst for the Research Idea Workflow. 你是科研思路工作流的研究紧迫性与领域态势分析专家。.
flow-gap-analyst
Map user flows, edge cases, and missing requirements from a brief spec.