CIFR

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's 10), governed by CIFR
  • cifr — 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-pds
  • 18.cifr/2024.tan.mnist-baseline
  • 18.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:

  1. Mint instantly, in your cifr.yml, with no external service. You don't wait for a journal.
  2. Refer to the live agent, not a frozen paper. The resolver always returns the latest version.
  3. 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.
  4. Are version-aware. 18.cifr/2016.chanda.resiliency-pds@2.1.0 pins 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-pds is better than 2024-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.