CIFR

Get Started

RAI for Researchers

How to register an agent, mint an RAI, cite it in your paper, and make your research permanently callable.

Why mint an RAI?

When you register your research code as a CIFR agent and mint an RAI, you get:

  • A permanent identifier that works in citations, URLs, and machine invocations
  • A public landing page showing your agent's metadata, paper reference, and trust tier
  • An invocation endpoint so other researchers can call your methodology with their own data
  • A version history tracking every published version of your agent
  • Citation tracking showing which other agents depend on yours

Step 1: Write your cifr.yml

Every CIFR agent has a cifr.yml contract that declares its identity, interface, and paper metadata:

agent:
  name: resiliency-pds
  rai: 18.cifr/2016.chanda.resiliency-pds
  version: 1.0.0
  description: >
    Composite resiliency index for power distribution systems
    with multiple microgrids, via AHP + percolation theory.
  provenance_type: author_original

  paper:
    title: "Defining and Enabling Resiliency of Electric Distribution Systems..."
    doi: "10.1109/TSG.2016.2561303"
    year: 2016
    venue: IEEE Transactions on Smart Grid
    authors:
      - name: Sayonsom Chanda
      - name: Anurag K. Srivastava

  inputs:
    - name: topology
      format: application/json
      description: Network graph with bus/branch data

  outputs:
    - name: resiliency_index
      format: application/json
      description: R_total and sub-metrics

  invoke: python main.py

Step 2: Choose your RAI

Your RAI follows the format 18.cifr/YYYY.author.slug:

  • YYYY — the year your paper was published (or the year of first registration for unpublished work)
  • author — your surname, lowercase
  • slug — a short, descriptive kebab-case name for the work

Tips:

  • Pick a 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: mnist-baseline vs mnist-augmented
  • Once minted, an RAI cannot be renamed — choose deliberately

Step 3: Register your agent

Submit your agent through CIFR:

  1. Go to cifr.org.in/agents/new and upload your code with the cifr.yml
  2. CIFR builds your code in an isolated container and runs the canonical execution
  3. If the run succeeds, your agent is registered and the RAI is live

Your RAI immediately resolves at:

https://rai.cifr.org.in/18.cifr/YYYY.author.slug

Step 4: Cite your RAI

In your paper, cite the RAI inline:

We implement the methodology described in this paper as a CIFR agent, available at rai:18.cifr/2016.chanda.resiliency-pds. Researchers can invoke this agent with their own network topology data to reproduce our results or apply the method to new systems.

In a BibTeX entry:

@misc{chanda2016resiliency_agent,
  title  = {Resiliency-PDS CIFR Agent},
  author = {Chanda, Sayonsom},
  year   = {2016},
  note   = {rai:18.cifr/2016.chanda.resiliency-pds},
  url    = {https://rai.cifr.org.in/18.cifr/2016.chanda.resiliency-pds}
}

Step 5: Compose with other agents

If your methodology builds on another paper's code, declare the dependency:

agent:
  name: enhanced-resiliency
  rai: 18.cifr/2026.kumar.enhanced-resiliency
  depends_on:
    - 18.cifr/2016.chanda.resiliency-pds

  inputs:
    - name: topology
      format: application/json
    - name: resiliency_baseline
      format: application/json
      from_agent:
        rai: 18.cifr/2016.chanda.resiliency-pds
        output: resiliency_index
        inputs_from:
          topology: topology

When your agent runs, CIFR automatically calls the upstream agent first and feeds its output into your agent. The citation graph builds itself.

Publishing new versions

Update your cifr.yml version field and re-register:

agent:
  rai: 18.cifr/2016.chanda.resiliency-pds
  version: 2.0.0  # bumped from 1.0.0
  • The RAI stays the same — only the version changes
  • Callers using ?version=1.0.0 still get the old version
  • Callers without a version pin automatically get 2.0.0
  • Both versions appear in the descriptor's version_history