Concepts
Research Agent Identifiers
RAIs are CIFR's stable, citation-grade identifier for a paper-as-agent. Like a DOI, but for code that runs.
A Research Agent Identifier (RAI) is the long-lived handle external papers cite when they want to invoke another paper's methodology. Where a DOI says "this is the document I'm referring to", an RAI says "this is the callable I'm referring to — and here's its current shape".
Format
RAIs follow a DOI-inspired structure with a foundation prefix and a structured suffix:
18.cifr/{year}.{author}.{slug}
18— the RAI foundation namespace (parallel to DOI's10), governed by CIFRcifr— the registration agency code (CIFR is the first RA)/— separates the prefix from the suffix- year — four digits, the year the paper was first published. Stable forever, even if you publish a v2 in 2026.
- author — lowercase lead author's surname
- slug — kebab-case 2-4 word topic descriptor
Three forms
| Form | Example | When to use |
|---|---|---|
| Storage | 18.cifr/2016.chanda.resiliency-pds |
Database, cifr.yml, API queries |
| URI | rai:18.cifr/2016.chanda.resiliency-pds |
Inline citations, display |
| Resolution URL | https://rai.cifr.org.in/18.cifr/2016.chanda.resiliency-pds |
Browser, resolver |
Examples
18.cifr/2016.chanda.resiliency-pds18.cifr/2024.tan.mnist-baseline18.cifr/2025.okonkwo.attention-replication
Legacy format
The previous format RAI-{year}-{author}-{slug} (e.g. RAI-2016-chanda-resiliency-pds) is still accepted everywhere but will be normalized to the v2 format internally. Legacy URLs redirect to their canonical v2 equivalents.
Why a separate identifier?
A DOI would work in principle. But DOIs were designed for static documents, and they're tied to a specific publisher's deposit. CIFR's RAIs:
- Mint instantly, in your
cifr.yml, with no external service. You don't wait for a journal. - Refer to the live agent, not a frozen paper. The resolver always returns the latest version.
- Compose. Other agents declare
depends_on: [18.cifr/YYYY.author.slug]in their own contract, and CIFR's composition runtime calls the dependency transparently when their agent runs. - Are version-aware.
18.cifr/2016.chanda.resiliency-pds@2.1.0pins a specific version when reproducibility matters; without a version suffix, the latest is returned.
A DOI is still useful and CIFR will mint one alongside your RAI when DOI integration ships. They're complementary: the DOI is the citation handle for the paper, the RAI is the citation handle for the code that runs.
Declaring your RAI
Add it to cifr.yml. Once an agent has an RAI, attaching a paper: block becomes mandatory (the contract validator enforces this — RAIs without paper records would defeat the purpose).
agent:
name: resiliency-pds
rai: 18.cifr/2016.chanda.resiliency-pds
version: 1.0.0
description: Topological resiliency index for power distribution networks with multiple microgrids.
paper:
title: Defining and Enabling Resiliency of Electric Distribution Systems with Multiple Microgrids
doi: 10.1109/TSG.2016.2561303
year: 2016
venue: IEEE Transactions on Smart Grid
authors:
- name: Sayonsom Chanda
orcid: 0000-0003-4178-9482
- name: Anurag K. Srivastava
keywords:
- resilience
- microgrid
- distribution network
invoke: python -m resiliency
inputs:
- name: topology
format: application/json
outputs:
- name: result
format: application/json
Resolving an RAI
Via the public resolver
The resolver at rai.cifr.org.in supports content negotiation:
# JSON descriptor (default, or explicit Accept header)
curl https://rai.cifr.org.in/18.cifr/2016.chanda.resiliency-pds
# Pin to a specific version
curl 'https://rai.cifr.org.in/18.cifr/2016.chanda.resiliency-pds?version=1.0.0'
# HTML landing page (browser default)
curl -H 'Accept: text/html' https://rai.cifr.org.in/18.cifr/2016.chanda.resiliency-pds
The JSON response is an RAI Descriptor containing identity, agent contract, paper metadata, trust tier, and resolution URLs.
Via the API
# Internal API — returns the full Agent row
curl https://api.cifr.org.in/api/rai/18.cifr/2016.chanda.resiliency-pds
Resolver metadata
curl https://rai.cifr.org.in/.well-known/rai
# → { "schema_version": "0.1", "resolver": "cifr-rai-resolver", "supported_prefixes": ["18.cifr"] }
Naming etiquette
A few conventions worth following:
- Use the lead author's surname even when the paper has many authors. Renaming an RAI later is impossible — make the first call deliberate.
- Pick a topic slug that won't age badly.
resiliency-pdsis better than2024-results-final-v2. - If you have multiple papers on the same topic from the same year, distinguish them:
18.cifr/2024.okonkwo.mnist-baseline,18.cifr/2024.okonkwo.mnist-augmented. Year + author alone is rarely unique enough. - If you publish a v2 in a later year that genuinely supersedes v1, mint a new RAI under the new year — don't try to rename. Old citations should continue to resolve to the old paper.
Prefix allocation
CIFR governs the 18 foundation namespace and self-allocates 18.cifr as the first registration agency. Future institutions can apply for their own prefixes (e.g. 18.mit, 18.inl). See the RAI Prefix Policy for details.