Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Agent Card

Stability: beta -- Agent Cards are generated resources that follow the A2A specification. The schema may evolve as the A2A spec matures.

An Agent Card is a JSON document that describes an Orloj AgentSystem's A2A identity, capabilities, skills, and endpoint. Cards are auto-generated from AgentSystem metadata and its agents' tools.

Agent Cards are not stored resources -- they are computed on request from the agent's current state.

Discovery URLs

URLDescription
GET /.well-known/agent-card.jsonRoot card when exactly one AgentSystem is A2A-enabled
GET /v1/agent-systems/{name}/.well-known/agent-card.jsonCard for a specific AgentSystem

Both endpoints are public (no authentication required). Cards contain only metadata, not secrets.

Schema

FieldTypeRequiredDescription
namestringYesHuman-readable agent name. Derived from metadata.name.
descriptionstringNoAgent description. From metadata.annotations["orloj.dev/description"] or a prompt summary.
urlstring (URI)YesA2A JSON-RPC endpoint URL. Constructed from a2a.publicBaseURL + AgentSystem path.
versionstringNoAgent version. From metadata.labels["orloj.dev/version"] if present.
protocolVersionstringNoA2A protocol version. From a2a.protocolVersion config.
capabilitiesobjectNoSee Capabilities.
skills[]objectNoSee Skills.
authenticationobjectNoSee Authentication.
providerobjectNoSee Provider.

Capabilities

FieldTypeDescription
streamingbooleanWhether the agent supports tasks/sendSubscribe. Derived from task trace SSE support.
pushNotificationsbooleanWhether push notifications are available. Derived from TaskWebhook support.
stateTransitionHistorybooleanWhether task history is available.

Skills

Each skill entry represents a tool available to the agent:

FieldTypeRequiredDescription
idstringYesSkill identifier. From Tool.metadata.name.
namestringYesDisplay name. From Tool.metadata.name.
descriptionstringNoFrom Tool.spec.description. Omitted if the tool has no description.
inputSchemaobjectNoFrom Tool.spec.input_schema. Omitted (not empty) if the tool has no schema.
tags[]stringNoDerived from tool capabilities and operation classes.

Authentication

FieldTypeDescription
schemes[]stringAuth schemes accepted by the JSON-RPC endpoint. Reflects server auth configuration (e.g., ["bearer"]).

Provider

FieldTypeDescription
organizationstringOrganization name. From server configuration.
urlstring (URI)Organization URL.

Field Mapping

How Orloj resources map to Agent Card fields:

Card FieldSource
nameAgent.metadata.name
descriptionAgent.metadata.annotations["orloj.dev/description"], or prompt excerpt
urla2a.publicBaseURL + /v1/agent-systems/{name}/a2a
protocolVersiona2a.protocolVersion server config
capabilities.streamingServer SSE support enabled
capabilities.pushNotificationsTaskWebhook controller active
skills[].idTool.metadata.name (for each tool in Agent.spec.tools)
skills[].descriptionTool.spec.description
skills[].inputSchemaTool.spec.input_schema
authentication.schemesServer auth mode

Example Card

For an AgentSystem defined as:

apiVersion: orloj.dev/v1
kind: AgentSystem
metadata:
  name: research-system
  annotations:
    orloj.dev/description: "AI research assistant for academic papers"
spec:
  agents:
    - research-agent
  a2a:
    enabled: true

The generated card (at GET /v1/agent-systems/research-system/.well-known/agent-card.json):

{
  "name": "research-system",
  "description": "AI research assistant for academic papers",
  "url": "https://orloj.example.com/v1/agent-systems/research-system/a2a",
  "protocolVersion": "0.2",
  "capabilities": {
    "streaming": true,
    "pushNotifications": false,
    "stateTransitionHistory": true
  },
  "skills": [
    {
      "id": "web_search",
      "name": "web_search",
      "description": "Search the web for information",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": { "type": "string" }
        },
        "required": ["query"]
      },
      "tags": ["search"]
    },
    {
      "id": "arxiv_search",
      "name": "arxiv_search",
      "description": "Search arXiv for academic papers",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": { "type": "string" },
          "max_results": { "type": "integer" }
        },
        "required": ["query"]
      },
      "tags": ["search", "academic"]
    }
  ],
  "authentication": {
    "schemes": ["bearer"]
  },
  "provider": {
    "organization": "Orloj"
  }
}

Related