HCS-14 - Universal Agent ID Standard — Draft Discussion #135
Replies: 2 comments
-
|
I felt it important that the following be considered for compatibility and cross ecosystem standards work. While some functionality may be specific to the Hashgraph ecosystem and unique capabilities, there should be efforts to coordinate core functions for inter-composability and unified addressing (federated). Ethereum is working on a similar spec here. AgentFacts as Smart Contracts (see here) may also be something to be careful to ensure web2 and cross-web3 ecosystem data accessibility. Core to identity and web2 (and off-chain / network level) inter-compatibility, conflicts should be resolved and adoption (or complementary extension of) Trust-over-IP should be considered, especially as it is a likely contender for standards around off-chain and web2 data source validation / verification. |
Beta Was this translation helpful? Give feedback.
-
|
[major] I believe the standard is too broad in scope. I recommend splitting it into:
If you consider W3C identity, it is already a huge array of standards — a layered approach moving forward would align better with that model. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
HCS-14: Universal Agent ID — Draft Discussion (per HCS-4)
This Discussion is the canonical venue for community feedback after HCS-14 is merged as a Draft, following HCS-4’s “Merged Draft → GitHub Discussion” step. Please keep comments focused, actionable, and anchored to exact text when possible.
Participation
How to comment on exact lines
#L120-L148), copy the URL.Signal tags (prefix your comment)
Suggested template
Timeline & triage
Below is the full HCS-14 Markdown for convenience.
title: HCS-14 - Universal Agent ID Standard
description: The HCS-14 standard provides a systematic approach for generating globally unique identifiers for AI agents that work across both web2 and web3 environments.
sidebar_position: 14
HCS-14 Standard: Universal Agent ID Standard
Status: Draft
Discussion: #135
Discussions-To: #135
Last-Call-Ends: (TBD)
Table of Contents
/.well-known/agent.jsonwith UAID (Informative)did:aid:)did:uaid:)Authors
Abstract
The HCS-14 standard provides a systematic approach for generating globally unique identifiers for AI agents using the W3C Decentralized Identifier (DID) framework. By introducing dual DID methods (AID for registry-generated and UAID for self-sovereign identifiers), this standard enables consistent agent identification across web2 APIs, web3 protocols, and hybrid systems without requiring any specific infrastructure dependencies. Both methods embed routing information directly in the DID, making agent discovery and communication seamless across protocol boundaries.
Motivation
AI agents are proliferating across diverse platforms with different identification systems. Each protocol has evolved sophisticated identification systems optimized for their specific use cases - Web2 platforms provide stable API-based identifiers, blockchain systems leverage cryptographic addresses, consensus-based networks utilize account IDs, and decentralized registries implement database-optimized identifiers. While each approach works well within its protocol, cross-protocol coordination remains difficult:
Cross-Protocol Collaboration: As agents become more sophisticated, they increasingly need to work together across protocol boundaries. A research agent on one protocol might need to collaborate with a data analysis agent on another, or a creative agent might need to coordinate with a transaction agent on a different network. Enabling seamless collaboration amplifies the capabilities of all agents.
Unified Discovery: Each protocol has developed robust discovery mechanisms within their ecosystem. By creating a universal identification layer, we can build on these existing systems to enable agents to discover potential collaborators across all protocols, expanding the possibilities for agent interactions.
Trust Bridge Building: Different protocols have implemented innovative trust and verification mechanisms suited to their architectures. A universal ID system can serve as a bridge between these trust models, allowing protocols to maintain their security approaches while enabling cross-protocol verification.
Simplified Integration: Developers building multi-agent systems currently need to implement custom translation and routing for each protocol pair. A universal identification standard reduces this complexity, allowing developers to focus on agent capabilities rather than integration challenges.
The HCS-14 standard builds upon these opportunities by introducing universal, self-describing agent identifiers that complement existing protocol identification systems. By respecting and leveraging each protocol's native unique identifiers while adding a universal layer, we create a system where:
Specification
Guiding Principles
The HCS-14 standard defines two complementary DID methods: did:aid (deterministic) and did:uaid (sovereign). The following principles apply across methods; where method-specific behavior differs, it is stated explicitly.
Decentralized Generation: HCS‑14 introduces no central authority.
Self‑Describing Structure: The DID shall contain sufficient routing metadata to reach the agent without external lookups. By embedding registry and native ID information in parameters (
did:{method}:{root};registry=...;nativeId=...), cross‑protocol routing is enabled.Cryptographic Verifiability:
Collision and Uniqueness:
Protocol‑Agnostic Architecture: Whether an agent operates via centralized APIs, smart contracts, or consensus networks, HCS‑14 identification works uniformly while respecting each protocol’s native identifiers.
Evolution & Traceability: The DID format and parameter schema shall support additive evolution without breaking existing identifiers. In addition:
alsoKnownAs) and may publish operational history via HCS‑11 profiles and HCS‑19 topics.DID Structure
The HCS-14 standard uses the W3C DID format with two complementary methods:
Registry-Generated Identifiers (AID Method)
Self-Sovereign Identifiers (UAID Method)
Where:
did= W3C DID prefixhash= Base58-encoded identifier hashaid= Agent Identifier method (system-generated)uaid= Universal Agent Identifier method (self-sovereign)parameters= Semicolon-separated key-value pairs for routingNotes:
{hash}denotes the Base58-encoded identifier hash (SHA‑384 of canonical JSON; see Hash Generation).{hash}denotes the method‑specific identifier of the base DID after sanitization (no new hash is computed).DID Parameter Structure
Both AID and UAID methods use identical parameter structures for routing:
Example with common parameters:
Parameter definitions:
method= Either "aid" or "uaid"registry= Registry namespace (e.g., "nanda", "hol", "olas")proto= Protocol identifier (e.g., "hcs-10", "a2a", "mcp")nativeId= Protocol's native unique identifier (Ed25519 or ECDSA public key hex for HCS-10, domain for A2A/NANDA)uid= Unique identifier within the registry (e.g., agent name for NANDA, account ID for HCS-10)domain= Domain identifier for an agent (e.g. domain.com / foo.hbar / bar.eth / alice.btc)src= Multibase base58btc (z…) of the full base DID (optional; included only when the UAID id was sanitized by removing method‑specific parameters, query, or fragment from the base DID).Notes:
registryandprotocan be specified together as they serve different purposes - registry indicates the organization/namespace while proto indicates the communication protocol. The uid parameter is required and shall be "0" if not applicable.;. Implementations shall strip everything after the first;,?, or#from the base DID’s method‑specific identifier when forming the UAID id.Reserved and Optional Parameters (Informative)
The DID parameter space is intentionally focused on routing. Descriptive semantics like an agent's purpose or taxonomy are intentionally excluded from the DID to keep identifiers stable and compact.
p/purpose(reserved): NOT part of the routing parameters and NOT required for HCS-14. If communities need to convey purpose/taxonomy, include it in the agent profile (e.g., A2Aagent.jsonor HCS‑11 profile) and/or map to skill enums. Purpose values shall not appear in the DID string and are not inputs to the UAID hash.Agent Purpose (Informative)
Purpose denotes the intended role or mission of an agent (for example, “support assistant” or “indexer”). Because purpose is descriptive and may change over time, it is excluded from:
hash.Recommended placement for purpose metadata:
purposefield in/.well-known/agent.jsonalongsideskills.purposefield in the profile JSON (outside the UAID), optionally supported by verifiable credentials.Rationale: skills enumerations provide deterministic capability encoding; free‑text purpose complements skills without affecting identifier stability.
Hash Generation Methods
AID Method:
UAID Method:
srchandling. Used when agents already have established DID identities and to preserve sovereign identity.DID Method Selection
flowchart TD A["Agent Identifier Needed"] --> B{"Agent has existing W3C DID?"} B -->|No| C["Use AID Method"] B -->|Yes| D["Use UAID Method"] C --> E["Generate hash from<br/>6 canonical fields"] E --> F["did:aid:{hash};params"] D --> G["Derive id from<br/>existing W3C DID"] G --> H["did:uaid:{id};params"] F --> I["Universal Agent Discovery"] H --> ISupported Agent Protocols
Note the list of supported protocols is not exhaustive, but is a starting point for the standard. Additional protocols may be added as needed.
a2amcphcs-10nandaacp-virtualsacp-ibmolaswsrestgrpcmqttdaohybridCanonical Agent Data
The hash is computed from a canonical JSON representation containing ONLY these required fields:
{ "registry": "string", // Registry namespace (e.g., "hedera", "google", "olas") "name": "string", // Human-readable agent name "version": "string", // Semantic version (e.g., "1.0.0") "protocol": "string", // Protocol identifier from supported list "nativeId": "string", // Protocol's native unique identifier "skills": [number] // Array of capability enum values (0-39) }IMPORTANT: To ensure deterministic ID generation:
Communication Details (Informative): While not part of the ID hash, agents should advertise live endpoints via their native discovery channels or profiles:
/.well-known/agent.jsonhosts the service endpoint URL. The agent name/ID may be carried in theuidparameter when applicable.inboundTopicId/outboundTopicId). In the DID, setnativeIdto the Hedera account ID anduid=0.servicesection or in the HCS‑11 profile.wss://agent.example.com/ws) via DID Documentserviceor HCS‑11 profile.These details should be discoverable through each protocol's native mechanisms or via registries that map HCS‑14 DIDs to current endpoints.
Field normalization rules:
registryandprotocolvalues shall be normalized to lowercase.skillsarray shall be sorted numerically in ascending order.Native Protocol IDs
Most protocols provide native unique identifiers that ensure global uniqueness. HCS‑14 does not mandate any specific network; instead it prescribes a consistent mapping:
"eip155:1:0x742d…41Bd","hedera:testnet:0.0.123456""microsoft.com""https://api.example.com/agents/123""pirate-bot""mcp-filesystem""1:42"Guidance:
/.well-known/agent.json, with the agent’s name/ID carried inuidwhen applicable.Agent Skills
Skills are represented as numeric enums to ensure deterministic sorting, aligned with A2A protocol terminology.
Core Skills (0-19)
Protocol-Specific Skills (20-39)
Protocol Identifiers
Protocol identifiers shall use string values rather than enums to provide flexibility for:
acp-ibmvsacp-virtuals)Interoperability (Informative)
ERC‑8004 Alignment (EVM Agent Registries)
The ERC‑8004 effort proposes trustless, on‑chain agent discovery and reputation primitives in the EVM ecosystem. HCS‑14 aligns as follows:
nativeIdshould use CAIP‑10 account identifierseip155:<chainId>:<address>to ensure chain‑qualified uniqueness and tooling compatibility.registryto a stable namespace representing the ERC‑8004 registry or program (e.g.,olas,virtuals, or a deployment‑specific label). Namespaces shall be documented by the operator.verificationMethodderived from the EVM account and advertiseserviceentries pointing to A2A/MCP endpoints for cross‑protocol interop.This mapping preserves determinism (for AID) and sovereign identity (for UAID) while allowing ERC‑8004 registries to act as authoritative sources for state, reputation, or discovery.
Trust Over IP (ToIP) Alignment
ToIP profiles build upon W3C DID Core, DID Resolution, and verifiable credentials. UAID is compatible by design:
serviceentries for supported protocols (e.g.,A2AService,MCPService,HCS10Service).verificationMethodand appropriate relationships (authentication,assertionMethod).alsoKnownAsto link did:uaid to protocol‑specific DIDs (e.g.,did:pkh:eip155:…,did:ethr:…,did:web:…).CAIP alignment (informative):
hedera:mainnet|testnet|previewnet|devnet) when forming resource references.nativeId:hedera:<network>:<account>.These guidelines enable HCS‑14 subjects to participate in ToIP trust frameworks without altering the identifier.
Hash Generation
The hash generation process follows these steps. The following steps are normative; implementations shall perform steps 1–6:
Rationale: SHA-384 is selected for its larger security margin and robustness under quantum search (e.g., Grover's algorithm) while remaining widely available in standard libraries. This choice is about collision resistance for identifiers; it does not imply novel cryptographic trust assumptions.
A2A Agent.json Integration
For A2A protocol agents, skills are extracted from the skills array in the domain's
/.well-known/agent.jsonfile:Example:
/.well-known/agent.jsonwith UAID (Informative)Agents served over A2A should include a deterministic AID DID for cross‑protocol discovery when no sovereign DID already exists. The following illustrative agent card embeds an AID and basic routing metadata:
{ "name": "Customer Support Assistant", "description": "A2A agent for customer support", "version": "1.0.0", "did": "did:aid:QmV5dK7pQ2wX8nL4mT6yB3jF0uA9eC1zS;registry=microsoft;nativeId=microsoft.com;uid=customer-support-assistant", "protocol": "a2a", "endpoints": { "a2a": "https://support.microsoft.com/a2a" }, "skills": [0, 17, 19] }Notes:
didfield contains the UAID DID; parsers may also accept anidfield if preferred by the ecosystem, but emitters should usedidfor clarity.nativeIdcorresponds to the domain hosting this file; the agent name/id is carried inuid.Example: HCS‑11 Profile with UAID (Informative)
HCS‑11 profiles shall include a top‑level
didfield. For agents and servers, usedid:uaidto enable cross‑protocol routing and correlation:{ "version": "1.0", "type": 1, "display_name": "AI Assistant Bot", "did": "did:uaid:QmX4fB9XpS3yKqP8MHTbcQW7R6wN4PrGHz;registry=hol;nativeId=0.0.2656337;uid=helper-bot", "inboundTopicId": "0.0.789101", "outboundTopicId": "0.0.789102" }Implementation
Validation Requirements
Implementations shall:
Test Vectors
Test Vector 1: HCS-10 Agent
Input:
{ "registry": "hol", "name": "Support Agent", "version": "1.0.0", "protocol": "hcs-10", "nativeId": "hedera:testnet:0.0.123456", "skills": [0, 17] }Canonical JSON:
{ "skills": [0, 17], "name": "Support Agent", "nativeId": "hedera:testnet:0.0.123456", "protocol": "hcs-10", "registry": "hol", "version": "1.0.0" }Expected DID Format (AID):
did:aid:{base58hash};registry=hol;nativeId=hedera:testnet:0.0.123456;uid=0Test Vector 2: A2A Agent
Input:
{ "registry": "google", "name": "Customer Bot", "version": "2.1.0", "protocol": "a2a", "nativeId": "salesforce-support-agent", "skills": [0, 17, 19] }Canonical JSON:
{ "skills": [0, 17, 19], "name": "Customer Bot", "nativeId": "salesforce-support-agent", "protocol": "a2a", "registry": "google", "version": "2.1.0" }Expected DID Format (AID):
did:aid:{base58hash};registry=google;nativeId=salesforce.com;uid=support-agentImplementation Requirements
Implementations shall comply with the following technical specifications:
String Normalization: Registry and protocol fields shall be converted to lowercase. All string fields shall have leading and trailing whitespace removed.
Deterministic Serialization: JSON objects shall be serialized with keys sorted lexicographically. Skills arrays shall be sorted numerically in ascending order.
Hash Generation: SHA-384 shall be applied to UTF-8 encoded canonical JSON. The resulting hash shall be encoded using Base58.
Field Validation: All required fields (registry, name, version, protocol, nativeId, skills) shall be present and non-empty.
Native Identifier: The nativeId field shall contain the protocol's canonical unique identifier as specified in the Native Protocol IDs table.
Skills Array: The skills field shall contain an array of numeric skill identifiers. Empty arrays are permitted.
Determinism and Collisions (AID): AID identifiers are deterministic by design. Identical canonical agent data yields the same AID. In practice, uniqueness is anchored by
nativeId(e.g., public key or domain) andregistry. If distinct deployments require separate identifiers, bumpversionor use distinctuidvalues outside the hash; do not introduce non‑deterministic inputs into the canonical set.Change management and traceability: Any change to the six canonical fields shall result in a new AID. UAIDs change only when the underlying sovereign DID changes. Implementations should maintain linkage between prior and new identifiers (for example, via DID Document
alsoKnownAsentries or a custom relation), and may record state transitions or operational history in HCS‑11 profile documents and/or HCS‑19 audit topics.UAID DID Resolution Profile
Conformant resolvers shall return a DID Document satisfying the following minimal profile:
id: the DID of the subject (did:aid or did:uaid).verificationMethod: zero or more entries binding the UAID to cryptographic material when available (e.g., Ed25519 public key forhcs-10, EVM account for CAIP‑10 identifiers), referenced fromauthenticationand/orassertionMethod.service: zero or more entries advertising routable endpoints derived from declared protocol(s); recommended types includeA2AService,MCPService, andHCS10Servicewith HTTP(S), gRPC, WS, or DIDComm URIs as appropriate.Resolvers may include
alsoKnownAslinks to protocol‑specific DIDs (e.g.,did:pkh,did:ethr,did:web) to optimize federation with ToIP trust frameworks.Security Considerations
Trust and Reputation (Informative)
“Trust” in this specification refers to distinct concepts:
registry=hol,registry=olas). HCS‑14 carries routing hints but does not endorse any registry.alsoKnownAsto reputation systems); and/orThis separation keeps AIDs deterministic and UAIDs self‑sovereign and verifiable, while allowing ecosystems to build rich trust frameworks on top.
Traceability (Informative)
HCS‑14 separates immutable identification from mutable operational context to enable end‑to‑end traceability without sacrificing identifier stability:
registry,nativeId,uid) provide stable, protocol‑specific anchors.Examples
Example 1: HCS-10 Agent
{ "registry": "hol", "name": "Support Agent", "version": "1.0.0", "protocol": "hcs-10", "nativeId": "hedera:testnet:0.0.123456", "skills": [0, 17] }Generated DID (AID):
did:aid:QmX4fB9XpS3yKqP8MHTbcQW7R6wN4PrGHz;registry=hol;nativeId=hedera:testnet:0.0.123456;uid=0Example 2: A2A Agent (Microsoft)
{ "registry": "microsoft", "name": "Customer Support Assistant", "version": "1.0.0", "protocol": "a2a", "nativeId": "microsoft.com", "skills": [0, 7, 17, 31] }Generated DID (AID):
did:aid:Qm7X8kL3mN5vP1wQ8xR2tY6hB4jC9sA2eE;registry=microsoft;nativeId=microsoft.com;uid=customer-support-assistantNote: uid references the agent name from Microsoft's agent.json file hosted at microsoft.com/.well-known/agent.json
Example 3: MCP Server
{ "registry": "anthropic", "name": "Filesystem Tools", "version": "1.0.0", "protocol": "mcp", "nativeId": "mcp-filesystem", "skills": [20, 21, 23] }Generated DID (AID):
did:aid:QmP2fA5XpL7yKmN9MHQbcRW4R5wO3KtGIn;registry=anthropic;nativeId=mcp-filesystem;uid=0Example 4: Self-Sovereign Agent (UAID)
{ "registry": "hol", "name": "AI Assistant", "version": "1.0.0", "protocol": "hcs-10", "nativeId": "302a300506032b65700321009f8d5e7c6b3a2f1e4d9c8b7a6e5f4e3d2c1b0a9e8d7c6b5a4f3e2d1c0b9a8e7d", "skills": [0, 19] }Scenario: Agent already has W3C DID:
did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK.Generated DID (UAID):
did:uaid:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK;proto=hcs-10;nativeId=hedera:testnet:0.0.123456;uid=0Note: UAID id equals the did:key method‑specific identifier; no new hash is computed.
Example 5: Virtuals Protocol Agent
{ "registry": "virtuals", "name": "Commerce Bot", "version": "1.0.0", "protocol": "acp-virtuals", "nativeId": "eip155:1:0x742d35Cc6634C0532925a3b844Bc9e7595f41Bd", "skills": [0, 9, 10, 33] }Generated DID (AID):
did:aid:QmV5dK7pQ2wX8nL4mT6yB3jF0uA9eC1zS;registry=virtuals;nativeId=eip155:1:0x742d35Cc6634C0532925a3b844Bc9e7595f41Bd;uid=0Example 6: OLAS Service
{ "registry": "olas", "name": "Prediction Service", "version": "1.2.0", "protocol": "olas", "nativeId": "1:42", "skills": [16, 33, 34] }Generated DID (AID):
did:aid:QmZ8kL4mN6vP2wQ9xR3tY7hB5jC1sA9eD;registry=olas;nativeId=1:42;uid=0Method Selection Guidelines
When to Use AID Method (
did:aid:)Use for system-generated identifiers when:
When to Use UAID Method (
did:uaid:)Use for self-sovereign identifiers when:
Conclusion
The HCS-14 standard provides a robust protocol for generating deterministic, globally unique agent identifiers using the W3C DID framework. By introducing both AID (registry-generated) and UAID (self-sovereign) methods, this approach supports current registry-based discovery systems while enabling future self-sovereign agent ecosystems. The semicolon-separated parameter format allows agents to be located in their origin registries while maintaining the benefits of decentralized identifiers. This dual approach enables seamless agent discovery and communication across heterogeneous protocol environments, supporting both today's and tomorrow's AI agent architectures.
Copyright
This document is licensed under APACHE-2.0.
Beta Was this translation helpful? Give feedback.
All reactions