Skip to main content
Templates let you package an agent configuration for reuse or sharing. This guide walks through the workflow: clone the starter, customize files, deploy from your template to test, and (optionally) submit it to the marketplace. For the full manifest.json field reference, see the manifest reference.

Reference Template

Clone this starter repo to create your own template.

Clone the Starter

Fork or clone the reference template to get started:
Your repository should have this structure:

Configure manifest.json

The manifest defines your agent’s identity, required secrets, skills, scripts, routes, channels, tasks, and marketplace metadata. The starter ships with a _docs block documenting every field inline. See the manifest reference for every field’s type, defaults, and limits.
Remove the _docs block before submitting to the marketplace.

Skills

Skills are objects with a name and either a clawhub_slug or a cid. Use clawhub_slug for marketplace skills — they’ll automatically resolve to the latest published version when someone deploys your template. Use cid to pin a specific uploaded skill by its IPFS CID for byte-stable behavior.

Example

A complete manifest that includes secrets, skills, lifecycle scripts, a web route, and a daily scheduled task:

Customize Workspace Files

Files in workspace/ are copied to the agent’s workspace on deploy. Customize these to define your agent’s personality and behavior: Focus on SOUL.md to give your agent a distinct personality, and BOOTSTRAP.md if you want a custom onboarding flow.

Add Web App Support (Optional)

If your agent runs a server, API, or frontend dev server, add two things to manifest.json:
  1. scripts - lifecycle hooks that install deps and start the server
  2. routes - port forwarding rules that expose the server to the internet
Example from a Vite + React agent:
Important details:
  • build - Runs once after deploy or git push (e.g. npm install, compile). Executes from /home/node/clawd. Output logged to /tmp/user-build.log. 5 min timeout. If build fails, start does not run.
  • start - Launches a long-running background process after build completes (e.g. a web server). Executes from /home/node/clawd. Output logged to /tmp/user-start.log. Runs detached so it survives the runner exiting.
  • Retry scripts - To re-run the build/start lifecycle (e.g. after pushing changes that didn’t trigger a build), use the Retry Scripts action on the Danger tab or call POST /v0/agents/{agentId}/scripts/retry.
  • Your server must bind to 0.0.0.0, not localhost, or it won’t be reachable
  • Set protected: false for public routes, or true to require a gateway token
  • Use __AGENT_HOST__ as a placeholder in config files - replaced at runtime with the agent’s public hostname
  • For WebSocket/HMR setups (e.g. Vite), connect via WSS on port 443 through __AGENT_HOST__
Example Vite config using the host placeholder:

Deploy From Your Template

You can deploy an agent from your template before submitting it to the marketplace. This is the fastest way to iterate. Via the UI:
  1. Go to agents.pinata.cloud/agents and click Create Agent
  2. Select Start from a Template
  3. Paste your public repository URL (GitHub or GitLab)
  4. Complete the setup flow and deploy
Via the CLI:
Push changes to your repo and redeploy to test updates. Once you’re happy with your template, you can optionally submit it to the marketplace.
Image

Submit to Marketplace (Optional)

Share your template with the community by submitting it for review. Via the UI:
  1. Go to My Templates+ New Template
  2. Enter your public repository URL
  3. Click Validate to check for required files
  4. Review the parsed manifest and workspace files
  5. Click Submit to send for review
Via the CLI:
Template status progression:
  • draftpending_reviewpublished (or rejected)
  • Published templates can be archived (soft-deleted) and resubmitted later

Managing Submissions

Track and update your templates in My Templates or via CLI:
Templates submitted with a paid tier use x402 micropayments for one-time purchase. Buyers pay before deploy; once paid, the template behaves like any other in their account. Mark a template as paid in the template block of manifest.json - see the manifest reference for the full schema.