2.3 KiB
2.3 KiB
Agent Orchestration Schema (SSOT)
config/agent_registry.yml is the only source of truth.
Per-Agent Block
Use this block for every top-level agent:
orchestration:
mode: llm_only | crew_only | hybrid
crew:
enabled: true|false
default_profile: default
profile_hints:
profile_name: ["keyword1", "keyword2"]
profiles:
default:
team_name: "Agent Team"
parallel_roles: true
max_concurrency: 3
synthesis:
role_context: "Agent Orchestrator"
system_prompt_ref: "roles/<agent>/orchestrator_synthesis.md"
llm_profile: reasoning
team:
- id: role_id
role_context: "Role Name"
system_prompt_ref: "roles/<agent>/role.md"
llm_profile: science
skills: [optional, for router summary only]
delegation:
enabled: false
max_hops: 2
forbid_self: true
allow_top_level_agents: []
a2a:
enabled: false
allow_top_level_agents: []
max_hops: 2
forbid_self: true
response_contract:
user_visible_speaker: self
crew_roles_user_visible: false
Generation Rules
tools/agents generatebuildsconfig/crewai_agents.jsonfromorchestration.*.- Router uses
crewai_agents.jsononly for light decision metadata. - Optional generation target:
config/crewai_teams.generated.yml(feature flaggenerate_crewai_teams). - Runtime
services/crewai-service/app/registry_loader.pyremains bound tocrewai_teams.ymluntil final cutover.
Validation Rules
modemust be one of:llm_only,crew_only,hybrid.- If
mode in [crew_only, hybrid], thencrew.enabledmust betrue. - If
crew.enabled=true, then:crew.profilesmust be non-empty.crew.default_profilemust exist increw.profiles.- default profile must have either:
- non-empty
team, or delegation.enabled=true(delegation-only orchestrator).
- non-empty
response_contract.crew_roles_user_visiblemust befalse.- For top-level agents, user-facing response speaker is always
self.
Migration Notes
- Legacy
crewaiblock is still supported by generator as fallback. - Recommended path:
- define
orchestrationfor all top-level agents, - enable
generate_crewai_teams, - switch CrewAI runtime to generated teams file,
- remove legacy
crewaiblock.
- define