| ui | No | Optional static UI: { path: bundle-relative index.html }. | |
| mcp | No | MCP exposure: { mode: 'wrap'|'native', command?, args? }. 'native' requires the command that starts the bundle's own MCP server. Defaults to wrap. | |
| ref | No | Optional branch/tag/SHA. Defaults to the default branch HEAD. | |
| llms | No | Optional target clients. Defaults to ['claude','chatgpt','gemini'] when omitted. | |
| repo | No | owner/repo or a github.com URL — YOUR repo (readable by your connected GitHub token). Re-pulled server-side, so private repos you own work. | |
| slug | No | Permanent URL slug, kebab-case (3–60, no leading/trailing hyphen). Verify with findagent_check_slug first. | |
| tags | No | Optional (≤10). Free-form lowercase tags ([a-z0-9- ]). | |
| title | No | Agent name (3–80 chars). | |
| skills | No | Optional discovery metadata (the tools the agent exposes). Each: { id?, name, description? }. Never executed. | |
| runtime | No | From grounding.code_bundle.runtime: { kind: 'node'|'python', version? }. Defaults to node. | |
| tagline | No | One-line value prop (10–140). | |
| languages | No | Optional (≤20). Language/Framework slugs from findagent_list_tech_facets (software-development discipline only). | |
| entrypoint | No | From grounding.code_bundle.entrypoint: { path: bundle-relative module, export: handler name }. | |
| description | No | What it does / who it is for (50–4000). | |
| serve_modes | No | How the code runs when a buyer connects it. 'hosted' = FindAgent runs it in an isolated sandbox over the gateway (the DEFAULT — omit for this). 'local' = the buyer downloads and runs it on their OWN machine via @findagent/mcp so it can reach their localhost/local tools; FindAgent never runs it (the buyer trusts you, like a local MCP server). Pass ['hosted','local'] to offer BOTH. Only set this for an agent that must reach the buyer's own machine — an agent whose credential targets a localhost host CANNOT be served hosted. NOTE: this call OVERWRITES the draft's serve modes — when re-calling for an existing draft, re-send serve_modes to keep a prior 'local'/'both' choice (omitting it resets to hosted-only). | |
| tech_domains | No | Optional (≤20). Tech Domain slugs from findagent_list_tech_facets (software-development discipline only). | |
| allowed_hosts | No | Default-deny egress allowlist — the ONLY hosts the sandbox may reach. From grounding.code_bundle.allowed_hosts. | |
| category_slug | No | The PRIMARY category: a TOP-LEVEL slug from findagent_list_categories (a discipline is required — usually 'software-development'). Put the required subdiscipline (and any industry + subindustry) in additional_category_slugs. | |
| example_prompts | No | REQUIRED — 1 to 5 concrete things a user can ask this agent to do (what a real user would type). | |
| credential_slots | No | Optional. Each item declares the SHAPE of a secret (ref/env/label/allowed_hosts…) — see `items`. DEFINITIONS ONLY — no values. | |
| additional_category_slugs | No | Optional (≤12). Extra slugs from findagent_list_categories. For EVERY top-level you select you MUST include one of its OWN subcategories here: a subdiscipline under your discipline, and (optionally) an industry top-level plus one of its subindustries. This is also where a discipline goes if your primary is an industry. | |