The recommended approach is built on five principles:
- Isolation — separate organizations per environment (dev, uat, prod)
- Config as code — all configs stored as JSON/YAML in Git
- Immutability + promotion — create in dev, validate in uat, promote to prod via automation
- Least privilege — RBAC, secrets isolation, and data boundaries per environment
- Reproducibility — idempotent apply, drift detection, and rollbacks from Git history
Assistant and tool configurations are stored as declarative YAML files:
kind: Assistant
apiVersion: v1
metadata:
name: order-agent
description: Handles order inquiries
spec:
systemPromptRef: prompts/order-agent.md
model: gpt-4.1
tools:
- ref: jira
- ref: zendesk
knowledge:
- ref: product-faqs
safetyPolicyRef: policies/safety.yaml
A typical repository layout separates assistants, squads, tools, and knowledge sources, plus an environments.yaml mapping each environment to its org ID, model defaults, and endpoints:
/platform
/assistants
order-agent.yaml
support-agent.yaml
/squads
support-level1.yaml
/tools
jira.yaml
zendesk.yaml
/knowledge
product-faqs.yaml
/policies
safety.yaml
environments.yaml # maps env → org IDs, model defaults, endpoints
schemas/ # JSONSchema for validation
Secrets are never committed to Git — store them in a secret manager and reference them via placeholders resolved at apply time.
Labeling for traceability: every resource is tagged with env, app, owner, and sha labels, so any live resource can be traced back to the exact environment, application, owner, and Git commit that produced it.