{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://agents.pinata.cloud/schemas/manifest.v1.json","title":"Agent Manifest","description":"Declarative agent-as-code configuration. Lives at /home/node/clawd/manifest.json inside the agent container.","type":"object","required":["version"],"additionalProperties":false,"properties":{"$schema":{"type":"string"},"version":{"const":1,"description":"Manifest schema version"},"agent":{"type":"object","description":"Agent identity","properties":{"name":{"type":["string","null"],"maxLength":100,"description":"Agent display name"},"description":{"type":["string","null"],"maxLength":10000,"description":"Agent personality / description"},"vibe":{"type":["string","null"],"maxLength":200,"description":"Agent vibe / tagline"},"emoji":{"type":["string","null"],"maxLength":32,"description":"Agent emoji","examples":["🤖"]}},"additionalProperties":false},"template":{"type":"object","description":"Template marketplace metadata (for submissions)","required":["slug","category","authorName"],"properties":{"slug":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","description":"URL-friendly slug","examples":["defi-trading-bot"]},"category":{"type":"string","minLength":1,"description":"Template category","examples":["defi"]},"tags":{"type":"array","items":{"type":"string"},"maxItems":10,"description":"Search tags (max 10)"},"authorName":{"type":"string","minLength":1,"maxLength":100,"description":"Author name","examples":["Jupiter Exchange"]},"authorUrl":{"type":"string","description":"Author website URL"},"authorLogoUrl":{"type":"string","description":"Author logo URL"}},"additionalProperties":false},"model":{"type":"object","description":"Model configuration","properties":{"primary":{"type":["string","null"],"description":"Primary model ID","examples":["anthropic/claude-sonnet-4-6"]}},"additionalProperties":false},"skills":{"type":"array","description":"Skills to attach (max 20). Use clawhub_slug for ClawHub skills or cid for IPFS.","maxItems":20,"items":{"type":"object","properties":{"clawhub_slug":{"type":"string","description":"ClawHub skill slug (preferred)","examples":["web-search"]},"cid":{"type":"string","description":"Skill content ID (IPFS CID)","examples":["bafkreiexample..."]},"name":{"type":"string","description":"Human-readable skill name"}},"anyOf":[{"required":["clawhub_slug"]},{"required":["cid"]}],"additionalProperties":false}},"secrets":{"type":"array","description":"Required secrets (max 30, names only — values live in the secrets vault)","maxItems":30,"items":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"Secret env var name","examples":["ANTHROPIC_API_KEY"]},"description":{"type":"string","description":"Human-readable description"},"required":{"type":"boolean","description":"Whether this secret is required (default: true)"}},"additionalProperties":false}},"scripts":{"type":"object","description":"Lifecycle scripts. Build runs once after deployment (git push). Start runs every time the agent boots.","properties":{"build":{"type":"string","maxLength":1000,"description":"Command to run once after deployment","examples":["npm install && npm run build"]},"start":{"type":"string","maxLength":1000,"description":"Long-running command started on every boot","examples":["npm start"]}},"additionalProperties":false},"tasks":{"type":"array","description":"Scheduled cron tasks (max 20). Deployed as openclaw cron jobs.","maxItems":20,"items":{"type":"object","required":["name","prompt","schedule"],"properties":{"name":{"type":"string","description":"Task name","examples":["daily-report"]},"prompt":{"type":"string","description":"Prompt to send to the agent on each run"},"schedule":{"type":"string","description":"Cron expression or interval (e.g. '0 9 * * *' or '3600000ms')","examples":["0 9 * * *"]},"enabled":{"type":"boolean","description":"Whether the task is active (default: true)"}},"additionalProperties":false}},"routes":{"type":"array","description":"Port forwarding rules (max 10)","maxItems":10,"items":{"type":"object","required":["port","path"],"properties":{"port":{"type":"integer","minimum":1025,"maximum":65535,"description":"Internal container port","examples":[3000]},"path":{"type":"string","description":"External path prefix","examples":["/api"]},"protected":{"type":"boolean","description":"Whether the route requires auth (default: true)"}},"additionalProperties":false}},"channels":{"type":"object","description":"Channel configuration (non-secret parts)","properties":{"telegram":{"type":"object","properties":{"enabled":{"type":"boolean"},"dmPolicy":{"type":"string","enum":["pairing","open","closed"]},"allowFrom":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"discord":{"type":"object","properties":{"enabled":{"type":"boolean"},"dmPolicy":{"type":"string","enum":["pairing","open","closed"]}},"additionalProperties":false},"slack":{"type":"object","properties":{"enabled":{"type":"boolean"}},"additionalProperties":false}},"additionalProperties":false}},"examples":[{"$schema":"https://agents.pinata.cloud/schemas/manifest.v1.json","version":1,"agent":{"name":"My Agent","description":"A helpful trading assistant","vibe":"chill and analytical","emoji":"📊"},"model":{"primary":"anthropic/claude-sonnet-4-6"},"secrets":[{"name":"ANTHROPIC_API_KEY"}],"scripts":{"build":"npm install","start":"npm start"},"tasks":[{"name":"daily-report","prompt":"Generate a daily summary report","schedule":"0 9 * * *"},{"name":"health-check","prompt":"Check all connected services","schedule":"3600000ms"}],"routes":[{"port":3000,"path":"/api"}]}]}