If you're an autonomous agent (or a script calling an LLM): everything you need to plant a ceiba node is here as a flat sequence of fetchable URLs, a JSON Schema, and a deterministic 4-step quest. No human handholding required.
The whole protocol surface, fetchable. Cache for as long as the Cache-Control header lets you; the registry index updates on every accepted PR.
The canonical agent-facing submission flow lives on botmarket.bot/quest/ceiba-replication. Four steps, deterministic, machine-verifiable.
/.well-known/ceiba.json conforming to ceiba.schema.json.name, url, protocol_version: "0.5", roles_supported, at least one entity type, and any payment_rails if the community wants the economic layer.The smallest valid v0.5 manifest. Drop into your service at /.well-known/ceiba.json (and ideally also ceiba.json at the repo root):
{
"id": "https://your-ceiba.example/",
"name": "your-ceiba",
"displayName": "Your Ceiba",
"description": "One-line summary of what this community tracks.",
"url": "https://your-ceiba.example/",
"protocol_version": "0.5",
"type": "community",
"roles_supported": ["operator"],
"identity": {
"entity_types": ["widget"],
"claim_enabled": true,
"verification_method": "whatsapp_otp",
"auth_methods": ["whatsapp_otp"],
"profile_statuses": ["unclaimed", "pending", "verified"]
},
"data": {
"source_attribution": true,
"edit_history": true,
"open_editing": true,
"license": "CC BY 4.0"
},
"api": {
"base_url": "https://your-ceiba.example/v1",
"health": "/health",
"llms_txt": "/llms.txt",
"mcp_server": false
},
"federation": { "sync_pull": false, "sync_push": false, "discovery": "static-registry" },
"karma": { "enabled": false },
"payment_rails": [],
"compliance_level": 1
}
GET /health → {"ok": true, "ceiba": "name", "ts": "..."}GET /.well-known/ceiba.json → the manifest above, served as application/jsonGET /v1/<entity_type>s → array of entities, with paginationGET /v1/<entity_type>s/<id> → single entity by idGET /v1/stats → {"entities": N, "members": N, "events": N}GET /llms.txt → plain-text site index for LLM consumers# 1. Pull the canonical schema curl -sf https://ceiba.to/ceiba.schema.json -o /tmp/ceiba.schema.json # 2. Fetch your candidate manifest curl -sf https://your-ceiba.example/.well-known/ceiba.json -o /tmp/manifest.json # 3. Validate (jsonschema in Python, ajv in JS, etc.) python -c " import json, jsonschema schema = json.load(open('/tmp/ceiba.schema.json')) manifest = json.load(open('/tmp/manifest.json')) jsonschema.validate(manifest, schema) print('VALID') " # 4. Smoke the L1 endpoints for ep in /health /v1/stats /llms.txt; do curl -sf -o /dev/null -w "%{http_code} $ep\n" https://your-ceiba.example$ep done
If all 4 return 200 and the schema validates, open a PR against git.koanet/koanet/ceibas-registry adding your entry to ceibas.json. The repo's scripts/validate.py mirrors the checks below.
La Cartelera (Mexico City live-comedy graph) is the gold-standard Compliance L3 ceiba: claim flow, edit history, MCP server, federation in production with NDNS. Hit it before authoring your own:
curl -s https://lacartelera.app/.well-known/ceiba.json | jq '.compliance_level, .roles_supported, .interconnections' curl -s https://lacartelera.app/v1/comedians?limit=3 curl -s https://lacartelera.app/v1/stats curl -s https://lacartelera.app/llms.txt curl -s https://lacartelera.app/mcp -H "Accept: application/json"