Templates
Ready-to-use veris.yaml configurations for common agent architectures. Copy the one closest to your setup and customize it.
1. Customer Support Agent (HTTP + Salesforce + Email)
A support agent that handles customer inquiries over HTTP, looks up customer data in Salesforce, and sends follow-up emails.
services:
- name: salesforce
dns_aliases:
- myorg.my.salesforce.com
- login.salesforce.com
- name: email
- name: postgres
actor:
channels:
- type: http
url: http://localhost:8008/chat
method: POST
headers:
Content-Type: application/json
request:
message_field: message
session_field: conversation_id
response:
type: json
message_field: reply
session_field: conversation_id
config:
RESPONSE_INTERVAL: "3"
agent:
code_path: /agent
entry_point: python -m app.main
port: 8008
environment:
DATABASE_URL: postgresql://postgres:postgres@localhost:5432/SIMULATION_ID
SALESFORCE_INSTANCE_URL: https://myorg.my.salesforce.com
SALESFORCE_ACCESS_TOKEN: ${SALESFORCE_ACCESS_TOKEN}2. Calendar Assistant (SSE Streaming + Google Calendar)
A scheduling agent that streams responses via Server-Sent Events and manages Google Calendar.
services:
- name: calendar
dns_aliases:
- www.googleapis.com
- calendar.google.com
- oauth2.googleapis.com
actor:
channels:
- type: http
url: http://localhost:8008/chat
method: POST
request:
message_field: message
session_field: session_id
response:
type: sse
chunk_event: chunk
chunk_field: text
done_event: end_turn
agent:
code_path: /agent
entry_point: python -m app.server
port: 8008
environment:
GOOGLE_APPLICATION_CREDENTIALS: /certs/mock-service-account.json
OPENAI_API_KEY: ${OPENAI_API_KEY}3. E-Commerce Agent (WebSocket + Shopify + Stripe)
A shopping assistant that communicates over WebSocket, queries Shopify for products, and processes payments via Stripe.
services:
- name: mcp/stripe
- name: mcp/shopify-storefront
- name: mcp/shopify-customer
- name: postgres
actor:
channels:
- type: ws
url: ws://localhost:3000/ws
request:
message_field: content
session_field: thread_id
response:
message_field: content
session_field: thread_id
agent:
code_path: /agent
entry_point: node dist/server.js
port: 3000
environment:
DATABASE_URL: postgresql://postgres:postgres@localhost:5432/SIMULATION_ID
STRIPE_API_KEY: ${STRIPE_API_KEY}
ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY}This example uses a Node.js agent with node dist/server.js as the entry point. Set the port to match your server’s listen port.
4. Email-First Agent (Email + Salesforce + Jira)
An agent that communicates entirely via email, triages support requests, and creates Jira tickets.
services:
- name: salesforce
dns_aliases:
- myorg.my.salesforce.com
- name: atlassian/jira
dns_aliases:
- myorg.atlassian.net
- name: email
actor:
channels:
- type: email
email_address: support@ea.veris.ai
config:
POLL_INTERVAL: "10"
RESPONSE_INTERVAL: "5"
agent:
entry_point: python -m app.email_handler
port: 8008
environment:
JIRA_BASE_URL: https://myorg.atlassian.net
JIRA_API_TOKEN: ${JIRA_API_TOKEN}
AGENTMAIL_API_KEY: ${AGENTMAIL_API_KEY}
EMAIL_WEBHOOK_URL: http://localhost:8008/webhook/email5. Enterprise Agent (Multi-Service + Microsoft + Oracle)
An enterprise procurement agent that uses Microsoft Graph, Azure DevOps, and Oracle Fusion Cloud.
services:
- name: microsoft/graph
dns_aliases:
- graph.microsoft.com
- name: microsoft/devops
dns_aliases:
- dev.azure.com
- name: microsoft/auth
dns_aliases:
- login.microsoftonline.com
- name: oracle
dns_aliases:
- myorg.fa.us2.oraclecloud.com
- name: postgres
actor:
channels:
- type: http
url: http://localhost:8008/api/chat
method: POST
headers:
Content-Type: application/json
Authorization: Bearer test-token
request:
message_field: query
session_field: session_id
static_fields:
department: procurement
response:
type: json
message_field: answer
session_field: session_id
config:
RESPONSE_INTERVAL: "4"
REFLECTION_INTERVAL: "2"
agent:
code_path: /agent
entry_point: python -m app.main
port: 8008
environment:
DATABASE_URL: postgresql://postgres:postgres@localhost:5432/SIMULATION_ID
AZURE_CLIENT_ID: ${AZURE_CLIENT_ID}
AZURE_CLIENT_SECRET: ${AZURE_CLIENT_SECRET}
ORACLE_BASE_URL: https://myorg.fa.us2.oraclecloud.com
OPENAI_API_KEY: ${OPENAI_API_KEY}6. Multi-Channel Agent (HTTP + Email)
An agent that handles both live chat (HTTP) and asynchronous email, with Slack notifications and a knowledge base.
services:
- name: slack
dns_aliases:
- slack.com
- api.slack.com
- name: atlassian/confluence
dns_aliases:
- myorg.atlassian.net
- name: email
- name: zendesk-support
dns_aliases:
- myorg.zendesk.com
actor:
channels:
- type: http
url: http://localhost:8008/chat
method: POST
request:
message_field: message
session_field: session_id
response:
type: json
message_field: response
- type: email
email_address: help@ea.veris.ai
config:
POLL_INTERVAL: "10"
RESPONSE_INTERVAL: "3"
agent:
entry_point: python -m app.server
port: 8008
environment:
SLACK_BOT_TOKEN: ${SLACK_BOT_TOKEN}
ZENDESK_API_TOKEN: ${ZENDESK_API_TOKEN}
CONFLUENCE_API_TOKEN: ${CONFLUENCE_API_TOKEN}
OPENAI_API_KEY: ${OPENAI_API_KEY}Key Reference
Services
See Services for the full list of available simulated services.
Actor Channel Types
| Type | Use When |
|---|---|
http | Agent exposes a chat REST API (JSON or SSE streaming responses) |
email | Agent communicates asynchronously via email |
voice | Agent handles phone/voice interactions |
browser-use | Agent has a web UI that users interact with via browser |
ws | Agent communicates over WebSocket |
Actor Config Variables
| Variable | Default | Description |
|---|---|---|
RESPONSE_INTERVAL | 2 | Seconds between actor turns |
POLL_INTERVAL | 15 | Email polling interval (seconds) |
REFLECTION_INTERVAL | 3 | Turns between actor self-reflection |
Agent Entry Points
| Stack | Example Entry Point |
|---|---|
| Python (module) | python -m app.main |
| Python (uvicorn) | uvicorn app.main:app --host 0.0.0.0 --port 8008 |
| Python (shorthand) | app.main:app (auto-expanded to uvicorn) |
| Node.js | node dist/server.js |
| Node.js (npm) | npm start |
Environment Variable Expansion
agent:
environment:
API_KEY: ${API_KEY} # From container env (set via veris env set)
DB_NAME: myapp_SIMULATION_ID # Replaced per-simulation