--- name: envelope-team category: ai-ml description: Design and generate .envelope.json AI agent team definitions — the open standard for multi-agent teams with hierarchy, access policies, human-in-the-loop gates, and cron schedules. --- # Envelope Team Design and generate `.envelope.json` AI agent team definition files — the open standard for building and deploying multi-agent teams on [Envelope](https://openenvelope.org). ## When to Use This Skill - User asks to build, design, or generate an Envelope team - User describes a workflow that could be automated by a team of AI agents - User wants to create a `.envelope.json` file for deployment - User needs help with agent hierarchy, access policies, or gates ## What This Skill Does 1. Takes a natural-language description of the team's purpose 2. Designs the agent hierarchy (supervisor → managers → workers) 3. Generates a schema-valid `.envelope.json` file 4. Includes access policies, variables, secrets, and gates as appropriate 5. Explains any schema concepts the user asks about ## How to Use ### Basic Usage ``` Build me an Envelope team for customer support triage — one supervisor, two agents that read Zendesk tickets, and a Slack notifier for escalations. ``` ``` Create an Envelope team definition for outbound sales — an SDR manager overseeing two SDRs who work HubSpot leads and a RevOps analyst. ``` ### With human-in-the-loop gates ``` Build an Envelope team that drafts marketing emails and pauses for human approval before sending. ``` ## Example **User**: "Build me an Envelope team for content moderation — a supervisor and two reviewer agents that check posts against community guidelines." **Output**: ```json { "$schema": "https://schema.openenvelope.org/team/v1.json", "name": "Content Moderation Team", "slug": "content-moderation", "version": "1.0.0", "description": "A supervisor and two reviewer agents that check posts against community guidelines.", "visibility": "team", "category": "ops", "requiredVariables": ["companyName"], "requiredSecrets": ["MODERATION_API_KEY"], "metadata": { "generatedBy": "Claude Code · openenvelope.org" }, "agents": [ { "key": "supervisor", "name": "Moderation Supervisor", "role": "supervisor", "capabilities": ["Route content to reviewer agents", "Aggregate decisions", "Escalate edge cases"], "model": "anthropic:claude-sonnet-4-5", "systemPrompt": "You supervise the content moderation team at {{companyName}}. Delegate each item to a reviewer and consolidate their verdicts." }, { "key": "policy-reviewer", "name": "Policy Reviewer", "role": "reviewer", "capabilities": ["Check content against community guidelines", "Flag policy violations"], "model": "anthropic:claude-haiku-3-5", "systemPrompt": "You review content for policy violations at {{companyName}}. Return a verdict of approve, flag, or remove with a reason.", "reportsToKey": "supervisor", "accessPolicy": { "accessPolicyVersion": "1", "rules": [ { "host": "api.moderation-service.com", "action": "allow" }, { "host": "*", "action": "deny" } ] } }, { "key": "spam-reviewer", "name": "Spam Reviewer", "role": "reviewer", "capabilities": ["Detect spam, bot activity, and duplicate content"], "model": "anthropic:claude-haiku-3-5", "systemPrompt": "You detect spam and bot activity at {{companyName}}. Return a verdict of approve, flag, or remove with a confidence score.", "reportsToKey": "supervisor" } ] } ``` ## Schema Reference ### Top-level fields | Field | Required | Description | |---|---|---| | `$schema` | yes | Always `https://schema.openenvelope.org/team/v1.json` | | `name` | yes | Human-readable team name | | `slug` | yes | URL-safe, lowercase, hyphens only | | `version` | yes | Semver e.g. `"1.0.0"` | | `description` | yes | What this team does | | `visibility` | yes | `"public"` · `"team"` · `"private"` | | `requiredVariables` | no | Non-sensitive config, interpolated via `{{varName}}` | | `requiredSecrets` | no | API keys, stored encrypted, injected as `${SECRET_NAME}` | | `schedule` | no | Cron schedule `{ cron, timezone, task }` | | `agents` | yes | Agent definitions | | `gates` | no | Human-in-the-loop checkpoints | ### Agent fields | Field | Required | Description | |---|---|---| | `key` | yes | Unique identifier within this file | | `name` | yes | Display name | | `role` | yes | Free-form e.g. `"supervisor"`, `"analyst"`, `"sdr"` | | `capabilities` | yes | What this agent can do — used for delegation routing | | `model` | yes | e.g. `anthropic:claude-sonnet-4-5`, `anthropic:claude-haiku-3-5` | | `systemPrompt` | yes | Agent instructions. Use `{{varName}}` and `${SECRET_NAME}` | | `reportsToKey` | no | `key` of manager agent. Omit for the top-level supervisor | | `accessPolicy` | no | Outbound HTTP allowlist | ### Hierarchy rule Exactly one agent should have no `reportsToKey` — this is the supervisor that receives the initial task. All others reference their manager's `key`. ### Access policy ```json "accessPolicy": { "accessPolicyVersion": "1", "rules": [ { "host": "api.example.com", "action": "allow" }, { "host": "*", "action": "deny" } ] } ``` ### Human-in-the-loop gates ```json "gates": [ { "name": "approval-check", "type": "approval", "trigger": { "afterAgent": "drafter" }, "onApprove": "continue", "onReject": "halt" } ] ``` ## Tips - Use `anthropic:claude-sonnet-4-5` for supervisors and managers; `anthropic:claude-haiku-3-5` for leaf agents doing repetitive work - Put anything org-specific (company name, support email, Slack channel) in `requiredVariables` - End access policy rules with `{ "host": "*", "action": "deny" }` for a strict allowlist - Add gates before any agent that sends emails, posts publicly, or makes purchases - Validate before deploying: `npx @openenvelope/schema validate ./team.envelope.json` ## Links - [openenvelope.org](https://openenvelope.org) — deploy and run teams - [schema.openenvelope.org/team/v1.json](https://schema.openenvelope.org/team/v1.json) — JSON schema - [npmjs.com/package/@openenvelope/schema](https://www.npmjs.com/package/@openenvelope/schema) — TypeScript types + validator - [openenvelope.org/mcp](https://openenvelope.org/mcp) — run teams via MCP from Claude.ai or ChatGPT