Canopy

Agent starter templates

Six pre-configured Canopy agents for the most common use cases AI startup developers ship. Built on Claude Agent SDK + Canopy's hosted MCP server. Scaffold any of them with one guided command — no copy-paste from the dashboard.

npx @canopy-ai/create-canopy-agent my-agent

What the CLI does

The CLI is a fully guided provisioning flow. The only key you paste manually is your Anthropic API key.

  1. Pick a starter (trading, research, lead-gen, content, treasury, travel).
  2. Pick agent name + approval threshold (with sensible per-starter defaults).
  3. Authenticate. Pick one:
    • Browser (recommended) — opens a consent page previewing the policy + agent about to be created. On Authorize, the server creates the policy + agent + grant with cleanup on failure and mints a revocable MCP token scoped to the new agent. The CLI never sees your org's primary API key.
    • Paste API key — paste an ak_live_… from dashboard/settings#api-keys. The CLI calls /api/policies + /api/agents itself.
    • --api-key <key> flag or CANOPY_API_KEY env var — non-interactive equivalent of Paste; skips the prompt entirely.
  4. Scaffold the project locally and write .env (MCP token for browser, API key for paste).

By the time the CLI exits you have a runnable npm start and a working agent + policy in your dashboard.

Audit provenance — in the browser path, the consent grant row (cli_grants) is bound to the new agents row, so the agent's origin is queryable: "this agent was created via this consent." The paste path doesn't get this property since the API key is reusable for any creation; that's the trade-off you pick when opting into paste mode.

After scaffolding, if you also want Canopy available in your dev tools (Claude Code, Cursor, etc.) while you build, run npx @canopy-ai/sdk connect from the project root.

Approval flow

Each starter ships with a recommended approval threshold, but the CLI lets you override. "No approvals needed" auto-approves every payment under the spend cap — useful if you want unattended runs or are testing within a tight cap.

The starters

StarterUse caseSuggested capSuggested approval
trading-defi-agentQuote → validate → execute via price feeds + DEXes$50/24h$5
research-agentMulti-source research; pays for gated data APIs$5/24h$0.50
lead-gen-agentEnrich/verify B2B contacts via per-lead paid APIs$25/24h$2
content-creator-agentPay for stock assets + AI image/voice/video generation$20/24h$3
treasury-billpay-agentPay vendor invoices + recurring subs within budget$200/24h$25
travel-agentSearch flights/airport schedules; surface options before booking$5/24h$0.50

Every starter is a small TypeScript project (src/main.ts, src/system-prompt.ts, src/log.ts) that wires Claude Agent SDK to Canopy's MCP server with two HTTP headers (Authorization, X-Canopy-Agent-Id). The system prompt is the per-starter customization; everything else is shared boilerplate.

What gets created in your Canopy org

When the CLI finishes, your dashboard will show:

  • A policy named <starter>-default with the cap, period, approval threshold, and (empty) allowlist preset.
  • An agent bound to that policy, with the name you chose. Status is active.

Both are editable in the dashboard. The CLI never touches them again — re-running it creates fresh resources.

Hand-cloning

Don't want to use the CLI? Each starter is a fully self-contained project under canopy-agent-starters/ in the Canopy monorepo. Clone the directory, fill in .env from the values in your dashboard, npm install && npm start.

What about the existing examples?

The agent-examples/ directory still exists and is the right reference for per-framework integration patterns — one chat REPL implemented in three frameworks (anthropic-sdk, vercel-ai, claude-agent-sdk). Use it when you want to see "how do I plug Canopy into framework X." Use the starters here when you want "what kind of agent should I build for use case Y."