.agt Manifest Specification

Version: 1.0 · Status: Draft · Date: 2026-05-01 · View as Markdown

Abstract

The .agt manifest is a signed JSON document describing an AI agent's identity, capabilities, and endpoints. Each manifest is content-addressed on IPFS and pointed to by a single DNS TXT record on the agent's .agt domain. The manifest is signed by the wallet that owns the underlying NFT, allowing any client to verify authorship without trusting any intermediary registry, gateway, or directory.

This specification replaces the pre-1.0 TXT-record format that stored each field as a separate DNS TXT record. That format is documented as legacy v0 in §10 — read-only support for the ~942 domains registered before this specification.

1. TXT Record

A v1 agent has exactly one .agt-related TXT record on the root of its domain:

agt-manifest=ipfs://<cid>

Where <cid> is a CIDv1 (RFC compliant, multibase-encoded, multihash-encoded) for the manifest JSON document. SHA-256 minimum. A domain MUST NOT have both agt-manifest= and legacy agt-version=1 records simultaneously. Resolvers that encounter both MUST prefer the v1 manifest pointer.

2. Manifest Document

Required fields

FieldTypeDescription
agtstringSpec version. MUST be "1.0" for this specification.
domainstringFully-qualified .agt domain. MUST match the domain hosting the TXT pointer.
ownerstringOwner wallet address. EIP-55 checksummed hex. MUST match the on-chain NFT holder.
created_atstringISO 8601 timestamp of manifest creation.
signaturestringEIP-191 signature over the canonical serialization (with the signature field removed). See §4.

Optional identity fields

FieldTypeConstraints
namestringMax 100 characters.
descriptionstringMax 280 characters.
iconstringHTTPS URL. Square. ≥128×128 recommended.
websitestringHTTPS URL.

Protocols

protocols is an array of objects. Each object declares one protocol the agent speaks.

FieldTypeRequiredDescription
idstringyesSee §3.
versionstringnoProtocol-specific version (e.g., "2025-11-05" for MCP).
endpointstringyesEndpoint URL. HTTPS strongly recommended.
authstringnoAuthentication scheme hint.

Capabilities

capabilities is an array of objects. Each object declares one capability and (optionally) the JSON Schema for its inputs and outputs.

FieldTypeRequiredDescription
idstringyesCapability identifier. Lowercase, hyphenated.
descriptionstringnoMax 200 characters.
inputobjectnoJSON Schema (Draft 2020-12) describing inputs.
outputobjectnoJSON Schema (Draft 2020-12) describing outputs.

Pricing

pricing is an object describing how the agent charges.

FieldTypeRequiredDescription
modelstringyesOne of: free, freemium, paid, contact.
free_tierstringnoDescription of the free tier (with freemium).
paidobjectconditionalRequired when model is paid or freemium.

The paid object:

FieldTypeRequiredDescription
currencystringyesISO 4217 code or token symbol.
amountstringyesDecimal amount as a string.
unitstringyesper_request, per_token_in, etc.
chainstringnoEIP-155 chain identifier when currency is a crypto token.

Example

{
  "agt": "1.0",
  "domain": "exampleagent.agt",
  "name": "Example Agent",
  "description": "Research and source citation agent.",
  "icon": "https://exampleagent.example.com/icon.png",
  "website": "https://exampleagent.example.com",
  "owner": "0x912D39E13b0bDAe2C5Cf5D0E2f9F4B38aE9c7f6a",
  "created_at": "2026-05-01T18:00:00Z",
  "protocols": [
    { "id": "mcp",  "version": "2025-11-05", "endpoint": "https://exampleagent.example.com/mcp" },
    { "id": "http", "endpoint": "https://exampleagent.example.com/api/v1", "auth": "bearer" }
  ],
  "capabilities": [
    {
      "id": "research",
      "description": "Searches academic and web sources, returns a cited summary.",
      "input":  { "type": "object", "properties": { "query": { "type": "string" } }, "required": ["query"] },
      "output": { "type": "object", "properties": { "summary": { "type": "string" }, "sources": { "type": "array" } } }
    },
    { "id": "summarization" }
  ],
  "pricing": {
    "model": "freemium",
    "free_tier": "10 queries/day",
    "paid": { "currency": "USD", "amount": "0.01", "unit": "per_request" }
  },
  "signature": "0x7f3e8d4c..."
}

3. Protocol Vocabulary

IDDescription
mcpModel Context Protocol (Anthropic). Tool/context integration.
a2aAgent-to-Agent Protocol (Google). Inter-agent communication.
httpREST or RPC over HTTP/HTTPS.
wsWebSocket. Real-time bidirectional.
grpcgRPC. High-performance RPC.

Custom protocol IDs are permitted. Lowercase, hyphenated.

4. Canonical Serialization & Signing

Canonicalization

Manifests MUST be serialized using RFC 8785 JSON Canonicalization Scheme (JCS) for signing and verification:

Signing

  1. Build the manifest object without the signature field.
  2. Canonicalize per JCS. Result: a UTF-8 byte sequence.
  3. Sign per EIP-191 (personal_sign) with the wallet that holds the domain's NFT.
  4. Place the resulting hex signature (with 0x prefix) in the signature field.

Verification

  1. Fetch the manifest JSON from IPFS.
  2. Compute the IPFS CID from the fetched bytes. Compare against the CID in the TXT record. They MUST match.
  3. Remove the signature field; canonicalize the remainder.
  4. Recover the signer address from the signature and the canonical bytes via EIP-191.
  5. Compare against the owner field. They MUST match.
  6. Compute tokenId = keccak256(bytes(tld) ++ keccak256(bytes(sld))).
  7. Query FNS.ownerOf(tokenId) on Polygon (registry contract 0x465ea4967479A96D4490d575b5a6cC2B4A4BEE65).
  8. Compare against the owner field. They MUST match.

If any of steps 2, 5, 8 fails, the manifest is invalid and MUST be rejected.

5. Resolution Algorithm

function resolve(domain):
  records = dnsTxt(domain)
  pointer = records.find(r => r.startsWith("agt-manifest="))

  if pointer:
    cid = pointer.slice("agt-manifest=ipfs://".length)
    bytes = fetchFromIpfs(cid)
    if cidOf(bytes) != cid: REJECT (gateway tampering)
    json = parse(bytes)
    if !verifySignature(json): REJECT
    if !verifyOnChainOwner(json.domain, json.owner): REJECT
    return { manifest: json, source: "v1" }

  if records.has("agt-version=1"):
    return { manifest: parseLegacyV0(records), source: "v0-legacy", verified: false }

  return null

6. Security Considerations

7. Capability Vocabulary (Reference)

69 reference capabilities across 8 categories. Custom IDs permitted — this list is non-exhaustive.

Language

IDDescription
researchGathers, synthesizes, and cites information from multiple sources.
summarizationCondenses long-form content into concise summaries.
translationTranslates text between natural languages.
content-writingGenerates articles, blog posts, documentation, or other long-form written content.
copywritingProduces marketing copy, ad text, taglines, and promotional content.
editingProofreads, corrects grammar, and improves style and clarity.
paraphrasingRestates text in different words while preserving meaning.
extractionPulls structured data from unstructured text (entities, dates, amounts).
classificationCategorizes text by topic, sentiment, intent, or other criteria.
question-answeringAnswers questions using provided context or general knowledge.
fact-checkingVerifies claims against authoritative sources.
reasoningPerforms multi-step logical reasoning and problem solving.
brainstormingGenerates creative ideas, alternatives, and divergent options.

Code

IDDescription
code-generationWrites source code from natural language specifications.
code-reviewAnalyzes code for bugs, style issues, and improvement opportunities.
code-explanationExplains what code does in plain language.
debuggingIdentifies and fixes software bugs.
testingWrites or executes tests and reports results.
refactoringRestructures code for clarity or performance without changing behavior.
code-documentationGenerates docstrings, READMEs, and technical reference for code.
database-queryGenerates, optimizes, or explains SQL and database queries.
code-completionProvides inline code suggestions and autocompletion.

Data

IDDescription
data-analysisPerforms statistical analysis and extracts insights from structured data.
data-visualizationCreates charts, graphs, dashboards, and visual data representations.
data-cleaningNormalizes, deduplicates, and corrects data quality issues.
data-transformationConverts data between formats, schemas, or structures (ETL).
mathSolves mathematical problems and performs symbolic or numeric computation.
forecastingBuilds predictive models and generates time-series forecasts.
anomaly-detectionIdentifies outliers and unexpected patterns in data.
reportingGenerates structured reports and executive summaries from data.
embeddingGenerates vector embeddings for text, images, or other inputs.
clusteringGroups similar items together based on features or content.
rankingScores and prioritizes items by relevance, quality, or other criteria.

Search & Retrieval

IDDescription
web-searchSearches the public internet for information.
semantic-searchRetrieves results based on meaning rather than keyword matching.
document-searchSearches across document collections, PDFs, or knowledge bases.
knowledge-retrievalQueries structured knowledge bases or performs retrieval-augmented generation.
citationFinds, formats, and verifies references and source attributions.

Media

IDDescription
image-generationCreates images from text prompts or other inputs.
image-editingModifies, enhances, or transforms existing images.
image-analysisExtracts information, labels, or descriptions from images.
video-generationCreates video content from text, images, or other inputs.
video-analysisExtracts information, scenes, or transcripts from video.
audio-transcriptionConverts spoken audio into text.
audio-generationProduces speech, music, or sound effects from text or other inputs.
ocrExtracts text from images, scans, or documents via optical character recognition.
designCreates UI mockups, graphics, layouts, or other visual design work.
3d-modelingGenerates or manipulates three-dimensional models and scenes.

Communication

IDDescription
chatEngages in real-time conversational interaction with users or other agents.
email-draftingComposes, formats, and suggests email messages.
meeting-notesTranscribes, summarizes, and extracts action items from meetings.
presentationCreates slides, pitch decks, and structured visual presentations.
tutoringProvides educational instruction, explanations, and guided learning.
customer-supportHandles support queries, troubleshooting, and issue resolution.
negotiationFacilitates structured dialogue toward agreement or compromise.

Automation

IDDescription
web-scrapingExtracts structured data from web pages.
api-integrationConnects to and orchestrates third-party APIs.
workflow-automationAutomates multi-step business or technical workflows.
schedulingManages time-based tasks, reminders, and calendar operations.
monitoringObserves systems, services, or data streams and reports on status changes.
deploymentManages CI/CD pipelines, releases, and software deployments.
file-managementOrganizes, converts, moves, and manages files and directories.
notificationSends alerts, messages, and notifications across channels.
data-entryFills forms, inputs data, and automates manual entry tasks.

Security

IDDescription
vulnerability-scanningAssesses systems and code for security weaknesses.
compliance-checkingVerifies adherence to policies, regulations, and standards.
threat-detectionIdentifies potential security threats and suspicious activity.
access-controlManages permissions, roles, and authentication policies.
encryptionHandles data encryption, decryption, and key management.

8. Legacy v0 (TXT-only) Manifests

Approximately 942 domains were registered before this specification with the pre-1.0 TXT-record format. Those domains have an agt-version=1 record and one TXT record per field. Format reference:

RecordPurpose
agt-version=1Sentinel; required for parsing.
agt-name=<name>Display name.
agt-description=<text>Description.
agt-icon=<url>Icon URL.
agt-website=<url>Website URL.
agt-owner=<address>Declared owner (unverified — no signature).
agt-protocol=<id>Repeatable.
agt-cap=<id>Repeatable.
agt-endpoint-<protocol>=<url>One per protocol.
agt-pricing=<keyword>free/paid/freemium/contact.

Resolvers SHOULD parse v0 records into a v1-shaped object with legacy: true. Writers MUST NOT generate new v0 manifests. A migration tool for legacy holders to upgrade in place is tracked in #110.

9. References