Skip to main content
Elementum agents operate at two levels: each agent has an internal architecture that balances AI reasoning with deterministic controls, and agents coordinate across organizational boundaries using the Agent-to-Agent (A2A) protocol. This page covers the internal component model, A2A discovery and authentication, the JSON-RPC messaging interface, streaming, and multi-turn conversations.

Individual Agent Architecture

Core Agent Components

Each Elementum agent follows a standardized internal architecture that balances AI capabilities with deterministic control structures: Elementum Agent Architecture - Light Mode

Agent Component Functions

  • System Prompts: Define agent behavior, expertise domain, and operational constraints
  • Orchestrator: Manages execution flow, tool calls, and contextual state
  • LLM Engine: Provides natural language understanding and generation capabilities
  • Memory Systems: Maintain context, conversation history, and learned patterns
  • Tool Registry: Catalog of functions and integrations the agent can invoke
  • Customer Data Access: Secure, governed access to relevant business data

Deterministic Control Mechanisms

The agent orchestrator enforces deterministic behavior through:
  • Workflow Action Constraints: Predefined actions that limit agent behavior to approved operations
  • Data Access Controls: Strict boundaries around what data the agent can access and modify
  • Tool Invocation Rules: Defined conditions for when and how external tools can be used
  • Escalation Triggers: Automatic handoff to human oversight based on confidence thresholds or business rules

Multi-Agent Coordination via A2A Protocol

Agent2Agent (A2A) Protocol Implementation

The A2A protocol enables standardized communication between Elementum agents and external agent systems. The protocol operates through several key mechanisms:
For complete A2A protocol specification and additional resources, see the A2A Project Documentation.

Direction of A2A Communication

Elementum agents act as A2A receivers (servers), not A2A clients. External systems — other AI agents, automation platforms, or custom applications — connect to an Elementum agent: they retrieve its Agent Card, authenticate, and send it messages. See Connecting to an Elementum Agent via A2A for the receiver-side setup. Elementum does not act as an A2A client. There is no way to install, import, or register an external agent’s Agent Card in Elementum, and an Elementum agent cannot call out to another system’s A2A endpoint to discover or consume its capabilities. To use an external, third-party agent’s capabilities inside an Elementum workflow, connect a managed agent through App Intelligence rather than A2A. Elementum supports two managed agent runtimes: Managed agents are configured per App and invoked from automations using Run Agent Task.

Agent Card Structure

Each agent publishes a standardized Agent Card that serves as both a discovery mechanism and capability contract. The Agent Card includes:
  • Identity and Capabilities: Unique agent identifier and list of specific functions the agent can perform, such as document analysis, compliance checking, or data transformation.
  • Communication Endpoints: Technical connection details including A2A protocol endpoints and health check URLs for establishing secure communication channels.
  • Authentication Requirements: Security specifications covering authentication methods, required permissions, and access scopes needed for interaction.
  • Data Schemas: Structured definitions of expected input formats and guaranteed output formats to ensure compatible data exchange between agents.
  • Governance Metadata: Compliance and operational requirements including audit trails, data residency constraints, and regulatory certifications that govern agent interactions.

A2A Authentication

Elementum supports two authentication methods for A2A communication: OAuth Client Credentials Flow Standard OAuth 2.0 client credentials grant for machine-to-machine authentication. External agents obtain access tokens from an authorization server and include them in A2A requests. Self-Signed JWT Authentication For scenarios where external agents issue their own JWTs, Elementum validates tokens using the following configuration: Required Claims You can enforce additional JWT claims that must be present with specific values. This is useful for restricting access to particular clients or tenants:
Use required claims to scope A2A access—for example, require client_id to match your partner’s registered client identifier, or validate aud contains your agent’s expected audience.

A2A Communication Flow

Inter-Agent Communication Patterns

  • Direct agent-to-agent calls for immediate responses
  • Timeout handling and circuit breaker patterns
  • Used for validation, lookup, and simple transformations
  • Long-running operations with callback notifications
  • Status polling and progress updates
  • Used for analysis, document processing, and complex workflows
  • Agents subscribe to relevant business events
  • Reactive processing based on data changes
  • Used for monitoring, alerting, and automated responses

Workflow Integration Architecture

Deterministic Structure Around Non-Deterministic Agents

Agents operate within workflow frameworks that provide governance and predictability:

Workflow-Agent Integration Points

  • Task Assignment: Workflow engine determines when and where to invoke agents
  • Context Provision: Agents receive structured context and constraints from workflow state
  • Result Validation: Agent outputs are validated against business rules before proceeding
  • Exception Handling: Failed or low-confidence agent responses trigger defined escalation paths

Connecting to an Elementum Agent via A2A

External systems can connect to Elementum agents that have been configured for A2A access. The connection follows the standard A2A handshake pattern.
A2A is one-directional in Elementum: your agent is the receiver, and the external system is the caller. An Elementum agent cannot consume or install another system’s Agent Card. To bring an external agent’s capabilities into a workflow, connect a managed agent through App Intelligence (Snowflake Cortex or AWS Bedrock). See Direction of A2A Communication.
To turn on A2A capabilities for your agent, select the agent and click the Connections tab. Toggle on A2A Streaming to enable A2A protocol communication. For additional conversation settings such as automatic record creation and inactivity timeouts, see A2A Conversation Settings. Elementum implements A2A protocol version 0.3.0 with streaming support.
The A2A protocol is an evolving standard. The examples in this documentation reflect Elementum’s current implementation. Contact your Elementum representative if you have questions about integration.

Configure A2A Authentication

Configure how external systems authenticate when calling your agent from the Authentication section of the agent’s Configure page. Elementum supports two authentication methods:
  • OAuth — Standard OAuth 2.0 client credentials grant for machine-to-machine access. No additional fields are required in the Agent Configuration page.
  • JWT — Self-signed JSON Web Tokens issued by an external system and validated by Elementum. Requires the configuration below.
The Authentication section controls how callers prove their identity to the agent. Streaming behavior is configured separately on the Connections tab; see A2A Conversation Settings.

JWT Authentication

Click + Add Authentication in the JWT section to open the configuration dialog. Elementum validates incoming tokens against a public key you provide. The caller signs each request with their private key, and Elementum verifies the signature using the configured public key. Because only the private key holder can produce a valid signature, a successful verification confirms the request’s authenticity.
If JWT-authenticated requests appear to run as the agent’s publisher instead of the calling user, check the following:
  • JWT authentication is enabled in the Authentication section.
  • The Email Address Claim Name matches the claim actually present in the token.
  • The configured JWKS URL is reachable, or the pasted public key is current and correctly formatted.
For the protocol-level specification—including required claim semantics and authentication flow details—see A2A Authentication below.

Discover Agent Capabilities

Each Elementum agent has a unique A2A endpoint URL in the format:
Retrieve the Agent Card to understand the agent’s capabilities, supported input/output modes, and available skills:
The Agent Card response includes:
  • Agent name and description
  • Supported protocol versions
  • Available skills and their descriptions
  • Authentication requirements
  • Capability flags (streaming, push notifications)

Send a Message to Initiate a Task

Use the message/send method to start an interaction:
Sending Attachments Messages can include file attachments alongside text content. To send an attachment, add a file part to the parts array with the file’s name, contentType, and a uri pointing to the file location:
Each file part requires the following fields: You can include multiple file parts in a single message, and they can be combined with text parts in any order. Both message/send and message/stream support attachments.
The file referenced by uri must be publicly accessible or reachable by the Elementum platform at the time the agent processes the message. If the file cannot be retrieved, the agent may not be able to process the attachment.

Receive Task Response

The agent returns a JSON-RPC response containing a Task object. The response includes a contextId that you can use for follow-up messages:

Streaming Responses

Elementum agents support streaming responses via message/stream using Server-Sent Events (SSE). This delivers real-time updates as tasks are processed — useful for long-running operations or when you want to display incremental progress to users. Initiating a Streaming Request Use the message/stream method instead of message/send:

Event Types

Every streaming response contains two event kinds, per the A2A spec:

TaskStatusUpdateEvent

Status updates track what the agent is doing. The status.state field progresses through submittedworkingcompleted. A status-update with state: "working" and no message means the agent is processing but has not called a tool yet. When the agent executes a tool, it emits an additional status-update with state: "working" and a status.message containing a description of the tool being executed:
If the agent calls multiple tools during a single request, each tool execution produces its own status-update event in sequence. The final event in every stream is a status-update with state: "completed" and final: true.

TaskArtifactUpdateEvent

Artifact updates carry the agent’s text response, streamed token-by-token. Each event includes append: true and contains one text chunk. The last chunk in the sequence has lastChunk: true.

Event Sequences

The order of events in a stream depends on whether the agent calls any tools while processing the request.
The simplest case — the agent responds directly without executing any tools:

Key Fields

Stream Handling Requirements

  • Events are delivered in order and must not be reordered
  • The stream ends when you receive a status-update event with "final": true
  • Terminal states include: completed, failed, canceled, rejected
  • Capture the contextId from the response for follow-up messages in multi-turn conversations

Task States

A2A tasks progress through defined lifecycle states:

Multi-Turn Conversations

The A2A protocol supports multi-turn conversations through the contextId field. When you send an initial message, the server generates a contextId in the response. Include this contextId in subsequent messages to continue the conversation. Initial Request:
Follow-up Request (using contextId from response):
The contextId groups related messages, enabling the agent to maintain conversational continuity across multiple interactions. When an agent requires additional input, it returns a task with input-required status—use the same contextId to provide the requested information.

A2A Conversation Settings

Configure conversation behavior for A2A agents on the Connections tab of the agent detail page.

A2A Streaming

Enable streaming responses for A2A protocol communication with the agent. When turned on, external systems can use the message/stream method to receive real-time, incremental responses. See Streaming Responses for protocol details.

Create a Record

When enabled, Elementum automatically creates a record when a conversation is initiated via the A2A protocol. This requires a conversation inactivity timeout to be configured.

Conversation Inactivity Timeout

Set the duration of inactivity (in minutes) before a conversation is automatically closed. When a conversation times out or completes, it can trigger follow-up automations.
Enable Create a Record and set a Conversation Inactivity Timeout to use the Agent Conversation Ended trigger in an App’s automation. This lets you run follow-up workflows — such as summarizing transcripts, updating CRM records, or generating reports — after an A2A conversation wraps up.

Testing A2A Connections

To test your A2A integration with Elementum agents, use the official A2A Inspector tool: A2A Inspector: github.com/a2aproject/a2a-inspector The inspector allows you to:
  • Fetch and validate Agent Cards
  • Send test messages and view responses
  • Monitor streaming events in real-time
  • Debug authentication and protocol issues

Protocol Version

Elementum currently implements A2A protocol version 0.3.0 with streaming support. The examples in this documentation reflect the current implementation. For the complete A2A protocol specification, see a2a-protocol.org.

Next Steps