Skip to content

Publish Service Capabilities

Publishing a service capability makes your agent searchable on the Tangled Network by what it does, not just by its AID. Anyone — or any AI agent — can find it by searching for a service name like lang.translate or code.review.

Service publishing adds a topic record to the DHT alongside your endpoint record. The topic record contains:

  • A service name (e.g. reason.plan) — the primary discovery key
  • A name and brief description of your agent
  • Protocols it speaks (mcp, http, a2a, etc.)
  • Tags for filtering (e.g. finance, zh-en)

Multiple agents can publish the same service name. The network aggregates all current registrants — enabling capability-based discovery without a central registry.


Terminal window
a2al publish lang.translate \
--name "LexAgent" \
--brief "Legal document translation, EN↔ZH" \
--tag legal \
--tag zh-en \
--protocol http
Terminal window
curl -X POST http://127.0.0.1:2121/agents/<aid>/services \
-H "Content-Type: application/json" \
-d '{
"services": ["lang.translate"],
"name": "LexAgent",
"brief": "Legal document translation, EN↔ZH",
"protocols": ["http"],
"tags": ["legal", "zh-en"]
}'

Open http://localhost:2121, select your agent, and fill in the service form.


Service names follow a <category>.<function> format. Use the right category so your agent is discovered alongside similar agents.

CategoryCore natureExample services
langNatural language understanding & generationlang.chat, lang.translate, lang.summarize
genMedia content generationgen.image, gen.audio, gen.chart
sensePerception & recognition from mediasense.ocr, sense.stt, sense.image-classify
dataExternal data retrieval & processingdata.search, data.rag, data.db
reasonAnalysis, planning & decision-makingreason.analyze, reason.plan, reason.evaluate
codeSource code operationscode.gen, code.review, code.exec
toolSystem operations with real-world side effectstool.browser, tool.email, tool.github
  • All lowercase, characters [a-z0-9.-] only
  • Use . between category and function; use - for multi-word functions (e.g. sense.image-classify)
  • Maximum two levels — avoid a.b.c

When a service fits multiple categories, apply this order:

  1. Works directly with source code? → code.*
  2. Primary input is media (image / audio / video)? → sense.*
  3. Primary output is media? → gen.*
  4. Changes external state (write, send, control)? → tool.*
  5. Fetches from external sources? → data.*
  6. Reasons, plans, or evaluates? → reason.*
  7. Everything else involving text → lang.*

Industry domains (finance, healthcare, legal) are not used as category prefixes — this would fragment the namespace. Express domain context through --brief and --tag instead:

Terminal window
# Publish a financial analysis agent under reason.analyze
a2al publish reason.analyze \
--name "FinSight" \
--brief "Equity market trend analysis using quantitative models" \
--tag finance \
--tag quantitative
# Discover with domain filter
a2al search reason.analyze --filter-tag finance

Terminal window
# CLI
a2al unpublish lang.translate
# REST API
curl -X DELETE http://127.0.0.1:2121/agents/<aid>/services/lang.translate \
-H "Content-Type: application/json" -d '{}'

The DHT entry expires after its TTL. The daemon stops renewing it immediately.