# Production Agent Example

This example demonstrates a full production-style agent with identity, model configuration, tools, resources, prompts, permissions, security, runtime settings, and metadata.

:::info Complete Reference This example uses all major ADL features. Use it as a reference when building production agents. :::

## Document[​](#document "Direct link to Document")

* YAML
* JSON

research-assistant.adl.yaml

```
$schema: https://adl-spec.org/0.2/schema.json

adl_spec: "0.3.0"

name: Research Assistant

description: An AI assistant that helps researchers find, summarize, and analyze academic papers.

version: "2.1.0"

id: urn:adl:agent:acme:research-assistant:2.1.0



data_classification:

  sensitivity: internal

  categories:

    - intellectual_property



lifecycle:

  status: active

  effective_date: "2026-01-15T00:00:00Z"



provider:

  name: Acme AI

  url: https://acme.ai

  contact: support@acme.ai



cryptographic_identity:

  did: did:web:acme.ai:agents:research-assistant

  public_key:

    algorithm: Ed25519

    value: base64-encoded-public-key



model:

  provider: anthropic

  name: claude-sonnet-4-20250514

  context_window: 200000

  temperature: 0.5

  capabilities:

    - function_calling



system_prompt: >-

  You are a research assistant that helps users find and analyze academic papers.

  Be thorough, accurate, and cite your sources.



tools:

  - name: search_papers

    description: Search for academic papers

    parameters:

      type: object

      properties:

        query:

          type: string

        limit:

          type: integer

          default: 10

      required:

        - query

    read_only: true



  - name: get_paper

    description: Get full paper details

    parameters:

      type: object

      properties:

        paper_id:

          type: string

      required:

        - paper_id

    read_only: true



  - name: save_note

    description: Save a research note

    parameters:

      type: object

      properties:

        title:

          type: string

        content:

          type: string

      required:

        - title

        - content



resources:

  - name: paper_index

    type: vector_store

    description: Vector index of paper embeddings

    uri: s3://research-data/papers/



prompts:

  - name: summarize

    description: Summarize a paper

    template: |

      Summarize the following paper:



      {{content}}



permissions:

  network:

    allowed_hosts:

      - api.semanticscholar.org

      - arxiv.org

    allowed_protocols:

      - https

    deny_private: true

  filesystem:

    allowed_paths:

      - path: /data/papers/**

        access: read

      - path: /data/notes/**

        access: read_write

  resource_limits:

    max_memory_mb: 2048

    max_duration_sec: 300



security:

  authentication:

    type: oauth2

    required: true

    scopes:

      - read:papers

      - write:notes

  encryption:

    in_transit:

      required: true

      min_version: "1.2"

  attestation:

    type: self

    issued_at: "2026-02-01T00:00:00Z"

    expires_at: "2027-02-01T00:00:00Z"



runtime:

  tool_invocation:

    parallel: true

    max_concurrent: 3

    timeout_ms: 30000

  error_handling:

    on_tool_error: retry

    max_retries: 2



metadata:

  authors:

    - name: Research Team

      email: research@acme.ai

  license: Apache-2.0

  documentation: https://docs.acme.ai/research-assistant

  repository: https://github.com/acme/research-assistant

  tags:

    - research

    - academic

    - papers

    - summarization
```

research-assistant.adl.json

```
{

  "$schema": "https://adl-spec.org/0.2/schema.json",

  "adl_spec": "0.3.0",

  "name": "Research Assistant",

  "description": "An AI assistant that helps researchers find, summarize, and analyze academic papers.",

  "version": "2.1.0",

  "id": "urn:adl:agent:acme:research-assistant:2.1.0",

  "data_classification": {

    "sensitivity": "internal",

    "categories": [

      "intellectual_property"

    ]

  },

  "lifecycle": {

    "status": "active",

    "effective_date": "2026-01-15T00:00:00Z"

  },

  "provider": {

    "name": "Acme AI",

    "url": "https://acme.ai",

    "contact": "support@acme.ai"

  },

  "cryptographic_identity": {

    "did": "did:web:acme.ai:agents:research-assistant",

    "public_key": {

      "algorithm": "Ed25519",

      "value": "base64-encoded-public-key"

    }

  },

  "model": {

    "provider": "anthropic",

    "name": "claude-sonnet-4-20250514",

    "context_window": 200000,

    "temperature": 0.5,

    "capabilities": [

      "function_calling"

    ]

  },

  "system_prompt": "You are a research assistant that helps users find and analyze academic papers. Be thorough, accurate, and cite your sources.",

  "tools": [

    {

      "name": "search_papers",

      "description": "Search for academic papers",

      "parameters": {

        "type": "object",

        "properties": {

          "query": {

            "type": "string"

          },

          "limit": {

            "type": "integer",

            "default": 10

          }

        },

        "required": [

          "query"

        ]

      },

      "read_only": true

    },

    {

      "name": "get_paper",

      "description": "Get full paper details",

      "parameters": {

        "type": "object",

        "properties": {

          "paper_id": {

            "type": "string"

          }

        },

        "required": [

          "paper_id"

        ]

      },

      "read_only": true

    },

    {

      "name": "save_note",

      "description": "Save a research note",

      "parameters": {

        "type": "object",

        "properties": {

          "title": {

            "type": "string"

          },

          "content": {

            "type": "string"

          }

        },

        "required": [

          "title",

          "content"

        ]

      }

    }

  ],

  "resources": [

    {

      "name": "paper_index",

      "type": "vector_store",

      "description": "Vector index of paper embeddings",

      "uri": "s3://research-data/papers/"

    }

  ],

  "prompts": [

    {

      "name": "summarize",

      "description": "Summarize a paper",

      "template": "Summarize the following paper:\n\n{{content}}\n"

    }

  ],

  "permissions": {

    "network": {

      "allowed_hosts": [

        "api.semanticscholar.org",

        "arxiv.org"

      ],

      "allowed_protocols": [

        "https"

      ],

      "deny_private": true

    },

    "filesystem": {

      "allowed_paths": [

        {

          "path": "/data/papers/**",

          "access": "read"

        },

        {

          "path": "/data/notes/**",

          "access": "read_write"

        }

      ]

    },

    "resource_limits": {

      "max_memory_mb": 2048,

      "max_duration_sec": 300

    }

  },

  "security": {

    "authentication": {

      "type": "oauth2",

      "required": true,

      "scopes": [

        "read:papers",

        "write:notes"

      ]

    },

    "encryption": {

      "in_transit": {

        "required": true,

        "min_version": "1.2"

      }

    },

    "attestation": {

      "type": "self",

      "issued_at": "2026-02-01T00:00:00Z",

      "expires_at": "2027-02-01T00:00:00Z"

    }

  },

  "runtime": {

    "tool_invocation": {

      "parallel": true,

      "max_concurrent": 3,

      "timeout_ms": 30000

    },

    "error_handling": {

      "on_tool_error": "retry",

      "max_retries": 2

    }

  },

  "metadata": {

    "authors": [

      {

        "name": "Research Team",

        "email": "research@acme.ai"

      }

    ],

    "license": "Apache-2.0",

    "documentation": "https://docs.acme.ai/research-assistant",

    "repository": "https://github.com/acme/research-assistant",

    "tags": [

      "research",

      "academic",

      "papers",

      "summarization"

    ]

  }

}
```

## Sections Breakdown[​](#sections-breakdown "Direct link to Sections Breakdown")

### Identity[​](#identity "Direct link to Identity")

The agent has a unique identifier and provider information:

* YAML
* JSON

```
id: urn:adl:agent:acme:research-assistant:2.1.0

provider:

  name: Acme AI

  url: https://acme.ai

  contact: support@acme.ai
```

```
{

  "id": "urn:adl:agent:acme:research-assistant:2.1.0",

  "provider": {

    "name": "Acme AI",

    "url": "https://acme.ai",

    "contact": "support@acme.ai"

  }

}
```

### Cryptographic Identity[​](#cryptographic-identity "Direct link to Cryptographic Identity")

For secure agent identification:

* YAML
* JSON

```
cryptographic_identity:

  did: did:web:acme.ai:agents:research-assistant

  public_key:

    algorithm: Ed25519

    value: base64-encoded-public-key
```

```
{

  "cryptographic_identity": {

    "did": "did:web:acme.ai:agents:research-assistant",

    "public_key": {

      "algorithm": "Ed25519",

      "value": "base64-encoded-public-key"

    }

  }

}
```

### Permissions (Deny-by-Default)[​](#permissions-deny-by-default "Direct link to Permissions (Deny-by-Default)")

:::warning Security Model Network and filesystem access is explicitly defined. Any access not explicitly granted is **denied**. :::

* YAML
* JSON

```
permissions:

  network:

    allowed_hosts:

      - api.semanticscholar.org

      - arxiv.org

    allowed_protocols:

      - https

    deny_private: true
```

```
{

  "permissions": {

    "network": {

      "allowed_hosts": [

        "api.semanticscholar.org",

        "arxiv.org"

      ],

      "allowed_protocols": [

        "https"

      ],

      "deny_private": true

    }

  }

}
```

### Security[​](#security "Direct link to Security")

Authentication and encryption requirements:

* YAML
* JSON

```
security:

  authentication:

    type: oauth2

    required: true

    scopes:

      - read:papers

      - write:notes
```

```
{

  "security": {

    "authentication": {

      "type": "oauth2",

      "required": true,

      "scopes": [

        "read:papers",

        "write:notes"

      ]

    }

  }

}
```

### Runtime Configuration[​](#runtime-configuration "Direct link to Runtime Configuration")

How the agent should execute:

* YAML
* JSON

```
runtime:

  tool_invocation:

    parallel: true

    max_concurrent: 3

    timeout_ms: 30000
```

```
{

  "runtime": {

    "tool_invocation": {

      "parallel": true,

      "max_concurrent": 3,

      "timeout_ms": 30000

    }

  }

}
```

## Notes[​](#notes "Direct link to Notes")

:::tip Production Checklist

* Use `$schema` to enable IDE validation and autocomplete
* Define explicit permissions (deny-by-default)
* Configure security requirements (authentication, encryption)
* Set attestation with appropriate expiration dates
* Include comprehensive metadata for discovery :::
