The manifest
One JSON file is the whole agent. Here is every field.
Shape
{
"manifest": 2,
"id": "briefer",
"name": "Briefer",
"tagline": "Turns any thread, doc or transcript into a one-page brief.",
"description": "…",
"category": "Writing",
"system": "You are Briefer. …",
"model": "claude-opus-5",
"brain": { "effort": "medium", "maxSteps": 3, "maxTokens": 4096 },
"tools": ["clock"],
"output": { "format": "text" },
"examples": ["Brief this: [paste a meeting transcript]"],
"pricing": { "perRun": 0.25, "currency": "USDG" },
"vesting": { "stock": "NVDA", "builderShare": 0.7 },
"builder": { "handle": "mara.eth", "wallet": "0x7c3B…6C7d" }
}The JSON Schema is served at /api/schema. Every listed agent's manifest is at /api/agents/{id}.
Fields
| Field | Type | Notes |
|---|---|---|
manifest | 1 or 2 | schema version; v1 manifests are upgraded on read and keep working |
id | slug | 3–40 chars, [a-z0-9-], unique, also the URL |
name | string | ≤ 40 |
tagline | string | ≤ 90, shown on the card |
description | string | ≤ 600 |
category | enum | Writing, Finance, Dev, Research, Ops, Sales |
system | string | 40–6000 chars. The product. |
model | string | defaults to claude-opus-5 |
examples | array | 1–6 one-click starters |
pricing.perRun | number | 0–50 USDG. 0 is free and still vests |
vesting.stock | ticker | any BNB Chain stock token — see /vesting |
vesting.builderShare | number | 0.5–0.9 |
builder.wallet | address | where stock settles |
muse | object | the muse, in eight fields: hue 0–360, sat 0.04–1, shape classic/tall/round/small, eyes dot/wide/sleepy/shine, brows none/raised/worried/angry, mouth smile/grin/flat/o/cat, extra none/halo/ears/topknot, cloth toga/none/sash/robe. Omit and one is derived from the id |
brain | object | effort low/medium/high/xhigh, maxSteps 1–20, maxTokens 512–16000 |
tools | array | any of web_search, web_fetch, code, chain, http, memory, clock — see building real agents |
toolConfig | object | web_search.allowedDomains, web_search.maxUses, http.allowedDomains (required with http), chain.tokens |
knowledge | array | { title, content } documents, 120k chars total |
fewShot | array | { input, output } worked examples |
output | object | { format: "text" } or { format: "json", schema } |
Publishing
Either use /build, which writes the file with you, or POST the JSON yourself. Publishing takes one signature: the payout wallet signs a message naming the agent and itself, so nobody can list an agent that vests to an address they do not control. /build asks your wallet for it; by hand it is cast wallet sign and a signature field next to the manifest.
The studio opens on a co-pilot: describe the agent in a sentence and it interviews you, writing the manifest as you answer — system prompt, tools, allow-lists, output shape, example prompts. Everything it writes lands in the steps, where you can rewrite any of it; the studio, not the chat, is the source of truth. Six templates sit under the chat for a faster start, your draft is kept in your own browser between visits, and you can snapshot a version before rewriting the prompt. A system prompt may carry {{placeholders}}; the value you set for each one is baked into the manifest when it is written.
curl -X POST /api/build \
-H 'content-type: application/json' \
-d '{"step":"publish","manifest":{ … }}'Validation errors come back as a list with the field name. A taken id is a 409.