Team Manifests
Team Manifests are the foundation of composable AI teams in MeetLoyd. Think of them as "npm for AI agents" - a declarative way to define, version, and deploy complete AI team configurations.
Overview
A Team Manifest defines:
- Components: Agents, skills, and avatars that make up your team
- Orchestration: How agents communicate and route tasks
- Versioning: Lock files ensure reproducible deployments
- Customization: Override configurations for your specific needs
Manifest Structure
Basic Example
{
"$schema": "https://meetloyd.com/schemas/team.manifest.json",
"name": "Enterprise Sales Team",
"slug": "enterprise-sales",
"version": "2.0.0",
"description": "AI-powered sales team for enterprise B2B",
"components": {
"agents": [
{
"ref": "store://agents/sdr-agent",
"version": "^1.0.0",
"localId": "sdr",
"skillOverrides": [
{ "ref": "store://skills/linkedin-sales-nav", "version": "^2.0.0" }
]
},
{
"ref": "store://agents/ae-agent",
"version": "^1.0.0",
"localId": "ae",
"reportsTo": "sales-manager"
},
{
"ref": "local://agents/custom-demo-agent",
"localId": "demo",
"customizations": {
"contextPromptTemplate": "Focus on {{industry}} use cases"
}
}
],
"skills": [
{ "ref": "store://skills/salesforce-crm", "version": "^3.0.0" },
{ "ref": "store://skills/email-sequences", "version": "^1.2.0" }
],
"avatars": [
{ "ref": "external://heygen/avatar-emma-professional", "localId": "emma" }
]
},
"orchestration": {
"mode": "hierarchical",
"entryAgentId": "sdr",
"routing": {
"intentRouting": [
{ "intent": "pricing_inquiry", "targetAgentId": "ae", "priority": 1 },
{ "intent": "demo_request", "targetAgentId": "demo", "priority": 2 }
]
}
}
}
Component References
Components are referenced using URIs that specify their source:
Store References
store://agents/sdr-agent@^1.0.0
store://skills/salesforce-crm@~2.1.0
store://avatars/professional-emma@1.0.0
^1.0.0- Compatible with 1.x.x (minor/patch updates allowed)~2.1.0- Patch updates only (2.1.x)1.0.0- Exact version (no updates)
External References
external://heygen/avatar-id
external://elevenlabs/voice-id
For third-party avatar/voice providers.
Local References
local://agents/my-custom-agent
For custom components defined in your tenant.
Lock Files
When you deploy a manifest, MeetLoyd generates a lock file (team.lock.json) that records the exact resolved versions:
{
"manifestVersion": "2.0.0",
"resolved": "2026-01-15T10:30:00Z",
"checksum": "sha256:abc123...",
"agents": {
"store://agents/sdr-agent": {
"resolvedVersion": "1.2.3",
"resolvedRef": "store://agents/sdr-agent@1.2.3",
"resolvedAt": "2026-01-15T10:30:00Z",
"checksum": "sha256:def456..."
}
},
"skills": { ... },
"avatars": { ... }
}
Lock files ensure:
- Reproducibility: Same versions deploy every time
- Audit trail: Track what versions are running
- Rollback: Return to previous known-good state
Version Management
Checking for Updates
GET /api/components/:componentType/:componentId/updates
Response:
{
"hasUpdate": true,
"currentVersion": "1.2.3",
"availableVersion": "1.3.0",
"changelog": "Bug fixes and performance improvements"
}
Upgrading Components
POST /api/manifests/:deployId/upgrade
Content-Type: application/json
{
"componentIds": ["store://agents/sdr-agent"],
"dryRun": false
}
Locking Versions
Prevent auto-updates for specific components:
{
"agents": [
{
"ref": "store://agents/sdr-agent",
"version": "1.2.3",
"locked": true
}
]
}
Rollback
POST /api/manifests/:deployId/rollback
Content-Type: application/json
{
"componentId": "store://agents/sdr-agent",
"toVersion": 2
}
Response:
{
"success": true,
"fromVersion": 3,
"toVersion": 2
}
Customizations
Override component behavior without forking:
Agent Customizations
{
"ref": "store://agents/sdr-agent",
"customizations": {
"contextPromptTemplate": "You specialize in {{industry}}",
"memoryConfig": {
"maxContextTokens": 8000
}
}
}
Skill Overrides
{
"ref": "store://agents/ae-agent",
"skillOverrides": [
{
"ref": "store://skills/custom-crm",
"version": "^1.0.0",
"replaces": "store://skills/salesforce-crm"
}
]
}
Orchestration
Define how agents work together:
Hierarchical Mode
{
"orchestration": {
"mode": "hierarchical",
"entryAgentId": "sdr",
"routing": {
"intentRouting": [
{ "intent": "pricing", "targetAgentId": "ae", "priority": 1 }
],
"fallbackAgentId": "sdr"
}
}
}
Parallel Mode
{
"orchestration": {
"mode": "parallel",
"agentIds": ["researcher", "writer", "reviewer"],
"aggregation": "consensus"
}
}
API Reference
Validate Manifest
POST /api/manifests/validate
Content-Type: application/json
{
"manifest": { ... }
}
Returns validation errors and warnings without deploying.
Resolve Manifest (Dry Run)
POST /api/manifests/resolve
Content-Type: application/json
{
"manifest": { ... }
}
Returns the lock file that would be generated, with all versions resolved.
Deploy Manifest
POST /api/manifests/deploy
Content-Type: application/json
{
"manifest": { ... },
"options": {
"dryRun": false,
"force": false,
"notes": "Initial deployment"
}
}
List Deployments
GET /api/manifests
Returns all team deployments for your tenant.
Get Deployment
GET /api/manifests/:deployId
Returns manifest, lock file, and component details.
Export Manifest
GET /api/manifests/:deployId/export
Returns the manifest in portable format.
Upgrade Components
POST /api/manifests/:deployId/upgrade
Content-Type: application/json
{
"componentIds": ["store://agents/sdr-agent"],
"dryRun": false
}
Rollback Component
POST /api/manifests/:deployId/rollback
Content-Type: application/json
{
"componentId": "store://agents/sdr-agent",
"toVersion": 2
}
Component Version History
GET /api/components/:componentType/:componentId/versions
Toggle Component Lock
POST /api/components/:componentType/:componentId/lock
Content-Type: application/json
{
"locked": true
}
Best Practices
1. Use Semantic Versioning
Follow semver for your custom components:
1.0.0→1.0.1: Bug fixes1.0.0→1.1.0: New features (backward compatible)1.0.0→2.0.0: Breaking changes
2. Lock Production Deployments
{
"agents": [
{ "ref": "store://agents/sdr-agent", "version": "1.2.3", "locked": true }
]
}
3. Test in Staging First
Deploy to a staging team before production:
loyd manifest deploy team.manifest.json --team staging-sales
4. Document Breaking Changes
When publishing updates, include release notes:
{
"version": "2.0.0",
"changelog": {
"breaking": ["Removed legacy CRM integration"],
"added": ["New Salesforce v2 integration"],
"fixed": ["Memory leak in long conversations"]
}
}
5. Use Version Ranges Wisely
- Development:
^1.0.0(get latest compatible) - Production:
1.2.3(exact version) - CI/CD:
~1.2.0(patch updates only)
Team Catalog
MeetLoyd ships with 23 pre-built team manifests in manifests/catalog/. These YAML files are the single source of truth for all team templates, store listings, and preset deployments.
Available Catalog Teams
| Team | Category | Description |
|---|---|---|
| Sales Team | sales | Complete AI sales operations |
| Support Team | support | Customer support escalation |
| C-Suite Team | executive | Executive leadership team |
| DevOps Team | engineering | Infrastructure and deployment |
| Marketing Team | marketing | Content and campaign management |
| Finance Team | finance | Financial operations and reporting |
| Legal Team | legal | Legal review and compliance |
| Product Team | product | Product management and roadmap |
| Strategy Team | strategy | Strategic planning and analysis |
| HR Team | hr | Human resources operations |
| Customer Success Team | customer-success | Customer retention and growth |
| Logistics Team | logistics | Supply chain and logistics |
| Manufacturing Team | manufacturing | Production operations |
| Healthcare Team | healthcare | Healthcare operations (HIPAA) |
| Legal Services Team | legal-services | Law firm operations |
| Insurance Team | insurance | Insurance operations |
| Accounting Team | accounting | Accounting and bookkeeping |
| Construction Team | construction | Construction project management |
| Real Estate Team | real-estate | Property management and sales |
| VC/PE Team | finance | Venture capital and private equity |
| Fundraising Team | finance | Fundraising and donor management |
| Support Tiers Team | support | Tiered support escalation |
| Enterprise Deployment Team | operations | SSO/SCIM deployment |
Using Catalog Teams
Deploy a catalog team via the CLI:
npx tsx scripts/deploy-manifest.ts \
--manifest manifests/catalog/sales-team.yaml \
--tenant tenant_abc123 \
--deployer user_admin
Or reference them in app manifests:
teams:
- type: preset
ref: preset://sales-team
Model Aliases
Instead of hardcoding model IDs like claude-sonnet-4-20250514, you can use human-friendly aliases that are automatically resolved at deploy-time:
agents:
- slug: sales-director
model: claude-sonnet-latest
Available Aliases
| Alias | Resolves To |
|---|---|
claude-opus-latest | claude-opus-4-6 |
claude-sonnet-latest | claude-sonnet-4-20250514 |
claude-haiku-latest | claude-haiku-4-5-20251001 |
gpt-latest | gpt-4o |
gpt-mini-latest | gpt-4o-mini |
gemini-latest | gemini-2.5-pro |
gemini-flash-latest | gemini-2.5-flash |
mistral-latest | mistral-large-latest |
deepseek-latest | deepseek-r1-distill-70b |
llama-latest | llama-3.3-70b |
Aliases are resolved both at deploy-time and as a safety net at runtime, so agents always route to the correct LLM provider.
Agent Authorization
Declare per-agent resource permissions directly in your manifest. Permissions are provisioned as OpenFGA authorization tuples at deploy-time.
agents:
- slug: crm-agent
name: CRM Agent
model: claude-sonnet-latest
authorization:
- resource: "crm_object_type:hubspot/contacts"
relation: editor
- resource: "crm_object_type:hubspot/deals"
relation: reader
- resource: "drive_folder:shared/reports"
relation: writer
Resource Format
Resources use {type}:{id} format. Common resource types:
| Type | Example | Description |
|---|---|---|
crm_object_type | hubspot/contacts | CRM object access |
git_repository | github/acme/website | Git repo permissions |
drive_folder | shared/reports | Drive folder access |
email_domain | acme.com | Email sending scope |
Relations
Common relations: reader, writer, editor, committer, admin.
Authorization is non-blocking — if OpenFGA is not configured in your environment, deployment continues with a warning.
Agent Identity (SPIFFE)
Agents automatically receive a SPIFFE identity at deploy-time. You can optionally configure SVID (SPIFFE Verifiable Identity Document) parameters:
agents:
- slug: api-agent
name: API Integration Agent
model: claude-sonnet-latest
identity:
spiffe:
audiences:
- "https://api.partner.com"
- "https://internal.example.com"
svidTTL: 7200 # 2 hours (default: 3600s)
Each agent's SPIFFE ID follows the pattern:
spiffe://meetloyd.com/tenant/{tenantId}/agent/{agentId}
This enables:
- Cross-service authentication — Agents can authenticate to external services using JWT-SVIDs
- Token exchange — Agents can request scoped tokens for partner APIs
- Trust verification — External services can verify agent identity via the MeetLoyd trust bundle
Catalog Validation
All catalog YAML manifests are validated against a strict schema when loaded. Validation is informational — errors are logged as warnings but don't prevent the catalog from loading.
Validated fields include:
- Agent definitions (slug, name, model, tools)
- Orchestration configuration (mode, routing, settings)
- Interaction rules (type, trigger, agents)
- Extended fields (ROI calculator, marketplace metadata, event billing)
- Authorization grants and identity config
If you see validation warnings in your logs, review the flagged fields:
[catalog] Validation error in my-team.yaml at agents.0.model: Required
Development Hot-Reload
When developing locally, the catalog loader watches manifests/catalog/ for changes and automatically refreshes the cache. Edit a YAML file and your next API request uses the updated version — no restart needed.
[catalog] Cache invalidated — sales-team.yaml changed
Hot-reload is:
- Automatic — starts on first catalog load, no configuration needed
- Debounced — rapid saves are coalesced (300ms window)
- Production-safe — disabled when
NODE_ENV=production
See Also
- Store Publishing - Publish components to the store
- Store Browsing - Browse and discover components
- Avatar Providers - Configure external providers
- Agent Authorization - OpenFGA authorization details
- Agent Identity - SPIFFE identity system