Creating Profiles
Assemble agents into deliberation councils or execution teams
Deliberation vs Execution
AOS supports two profile patterns. Choose based on whether you need a decision or a deliverable.
| Deliberation | Execution | |
|---|---|---|
| Purpose | Multi-perspective debate to reach a strategic decision | Structured workflow to produce implementation-ready artifacts |
| Orchestrator | Arbiter (neutral facilitator) | Domain-specific (e.g., CTO Orchestrator) |
| Delegation | Broadcast — all agents hear everything | Targeted — orchestrator assigns to specific agents |
| Agents | Debate and challenge each other | Produce artifacts and review each other's work |
| Output | Structured memo with recommendations and dissent | Execution package with docs, tasks, and checklists |
| Workflow | Implicit (rounds of debate) | Explicit (ordered steps with review gates) |
| Example | strategic-council, security-review | cto-execution |
| Brief sections | Situation, Stakes, Constraints, Key Question | Feature/Vision, Context, Constraints, Success Criteria |
Profile Schema
A complete profile.yaml with all fields:
schema: aos/profile/v1 # Required. Schema identifier.
id: strategic-council # Unique profile ID.
name: Strategic Council # Display name.
description: > # What this profile does.
Multi-perspective strategic
deliberation. Agents debate and
the Arbiter synthesizes a memo.
version: 1.0.0
assembly: # Who participates.
orchestrator: arbiter # Agent ID of the orchestrator.
perspectives: # List of participating agents.
- agent: catalyst
required: true
- agent: sentinel
required: true
- agent: architect
required: true
- agent: provocateur
required: true
structural_advantage: speaks-last
- agent: navigator
required: false
- agent: operator
required: false
delegation: # How work is distributed.
default: broadcast # broadcast | targeted
opening_rounds: 1 # Broadcast rounds before targeting.
tension_pairs: # Paired for productive conflict.
- [catalyst, sentinel]
- [architect, pathfinder]
- [advocate, navigator]
bias_limit: 5 # Max consecutive turns by one agent.
constraints: # Session boundaries.
time:
min_minutes: 2
max_minutes: 10
budget:
min: 1.00
max: 10.00
currency: USD
rounds:
min: 2
max: 8
error_handling: # Failure modes.
agent_timeout_seconds: 120
retry_policy:
max_retries: 2
backoff: exponential
on_agent_failure: skip
on_orchestrator_failure: save_transcript_and_exit
partial_results: include_with_status_flag
budget_estimation: # Token budget management.
strategy: rolling_average
fixed_estimate_tokens: 2000
safety_margin: 0.15
on_estimate_exceeded: drop_optional
input: # Brief format requirements.
format: brief
required_sections:
- heading: "## Situation"
guidance: "What is happening right now?"
- heading: "## Stakes"
guidance: "What's at risk?"
- heading: "## Constraints"
guidance: "Boundaries and limits."
- heading: "## Key Question"
guidance: "The single question to answer."
context_files: true
output: # What the profile produces.
format: memo
path_template: "output/memos/{{date}}-{{brief_slug}}-{{session_id}}/memo.md"
sections:
- ranked_recommendations
- agent_stances
- dissent_and_tensions
- tradeoffs_and_risks
- next_actions
- deliberation_summary
artifacts:
- type: diagram
frontmatter:
- date
- duration
- budget_used
- participants
expertise: # Persistent agent memory.
enabled: true
path_template: "expertise/{{agent_id}}-notes.md"
mode: per-agent
controls: # Runtime controls.
halt: true
wrap: true
interject: false Assembly
The assembly block defines who participates in the session.
orchestrator is the agent ID of the session leader. For deliberation, use arbiter (neutral facilitator). For execution, use a domain-specific orchestrator like cto-orchestrator.
perspectives lists participating agents. Each entry has:
- agent — Agent ID (must exist in core/agents/)
- required — If
true, always included. Iffalse, can be deactivated or dropped by budget estimation. - structural_advantage — Optional. Currently supports
speaks-last, guaranteeing the agent gives its position after hearing all others. - role_override — Optional. Injected into the agent's
{{role_override}}template variable to specialize it for this profile.
perspectives:
- agent: architect
required: true
role_override: "Produce architecture decision records and system design docs"
- agent: provocateur
required: false
structural_advantage: speaks-last
role_override: "Stress-test the plan. Find the gaps." Delegation
The delegation block controls how the orchestrator distributes work.
default sets the mode:
broadcast— Every agent sees every message. Used in deliberation.targeted— The orchestrator sends specific tasks to specific agents. Used in execution.
opening_rounds sets how many broadcast rounds happen before the orchestrator can begin targeting. Set to 1 for deliberation and 0 for execution.
tension_pairs lists pairs of agents brought into direct dialogue for productive conflict:
tension_pairs:
- [catalyst, sentinel] # Speed vs. sustainability
- [architect, pathfinder] # Proven patterns vs. novel approaches
- [advocate, navigator] # User needs vs. market positioning
- [strategist, operator] # Long-term sequence vs. what ships now bias_limit is the maximum number of consecutive turns any single agent can take before the orchestrator must rotate to another voice. Prevents any agent from dominating the conversation.
Constraints
constraints:
time:
min_minutes: 2 # Minimum session duration
max_minutes: 10 # Hard timeout
budget:
min: 1.00 # Minimum spend before wrap-up allowed
max: 10.00 # Hard budget cap (triggers wrap-up)
currency: USD
rounds:
min: 2 # Minimum deliberation rounds
max: 8 # Maximum rounds before forced synthesis
All three constraint types work together. The session ends when any max value is reached. The orchestrator cannot wrap up until all min values are met.
Tip
For execution profiles, set budget: null if you are using subscription-based LLM access. The time and round constraints still apply.
Workflow
Execution profiles can link to a workflow definition that specifies ordered steps, review gates, and artifact flow.
# In profile.yaml:
workflow: cto-execution-workflow # Links to workflow YAML by ID The workflow YAML defines the execution pipeline:
schema: aos/workflow/v1
id: cto-execution-workflow
name: CTO Execution Workflow
steps:
- id: requirements
name: Requirements Analysis
action: targeted-delegation
agents: [advocate, strategist]
prompt: "Analyze the brief and extract structured requirements"
input: []
output: requirements_analysis
review_gate: true
- id: design
name: Architecture Design
action: targeted-delegation
agents: [architect]
prompt: "Design the architecture based on requirements"
input: [requirements_analysis]
output: architecture_decision
review_gate: true
- id: review
name: Architecture Review
action: tension-pair
agents: [architect, operator]
prompt: "Review architecture for buildability"
input: [architecture_decision]
output: revised_architecture
- id: tasks
name: Task Breakdown
action: targeted-delegation
agents: [operator]
prompt: "Break the plan into engineering tasks with estimates"
input: [revised_architecture]
output: task_breakdown
- id: risk
name: Risk Assessment
action: targeted-delegation
agents: [sentinel]
prompt: "Review for security, reliability, maintainability risks"
input: [revised_architecture, task_breakdown]
output: risk_assessment
- id: stress-test
name: Stress Test
action: targeted-delegation
agents: [provocateur]
prompt: "Challenge the timeline, find gaps, stress-test assumptions"
input: [revised_architecture, task_breakdown, risk_assessment]
output: stress_test_findings
- id: synthesize
name: Final Assembly
action: orchestrator-synthesis
prompt: "Assemble the complete execution package"
input: [requirements_analysis, revised_architecture, task_breakdown, risk_assessment, stress_test_findings]
output: execution_package
gates:
- after: requirements
type: user-approval
prompt: "Do these requirements look right?"
on_rejection: retry_with_feedback
- after: design
type: user-approval
prompt: "Does this architecture look right?"
on_rejection: retry_with_feedback Each step defines:
- action —
targeted-delegation(send to specific agents),tension-pair(two agents debate), ororchestrator-synthesis(orchestrator assembles final output) - input — Output IDs from previous steps that feed into this step
- output — Named output artifact produced by this step
- review_gate — If
true, the user can approve or reject before proceeding
role_override in the profile's assembly.perspectives entries specializes agents for the workflow. The same Architect agent writes design docs in one profile and reviews code in another.
Output Format
The output.format field determines the structure of the profile's deliverable.
| Format | Description | Typical Use |
|---|---|---|
memo | Structured decision memo with recommendations, dissent, and next actions | Deliberation profiles |
execution-package | Multi-file deliverable with docs, tasks, diagrams, and checklists | Execution profiles |
report | Single-document analysis report | Review profiles |
checklist | Actionable checklist with status tracking | Audit profiles |
path_template uses variables to generate the output path:
path_template: "output/memos/{{date}}-{{brief_slug}}-{{session_id}}/memo.md"
Available template variables: {{date}}, {{brief_slug}}, {{session_id}}, {{profile_id}}.
sections lists the named sections included in the output:
sections:
- ranked_recommendations
- agent_stances
- dissent_and_tensions
- tradeoffs_and_risks
- next_actions
- deliberation_summary artifacts lists additional outputs (diagrams, structured data):
artifacts:
- type: diagram # Mermaid architecture diagram
- type: task_list # Structured task breakdown Execution Profiles
Execution profiles differ from deliberation in several key ways.
Targeted delegation. The orchestrator sends specific tasks to specific agents rather than broadcasting. The CTO Orchestrator knows that Architect produces design docs and Operator produces task breakdowns — it delegates accordingly.
Ordered workflow. Steps execute in sequence. Each step's input references outputs from previous steps, creating a dependency chain. The orchestrator manages this flow automatically.
Review gates. The gates section defines user-approval checkpoints. When the workflow reaches a gate, it pauses and presents the output to the user:
gates:
- after: requirements
type: user-approval
prompt: "Do these requirements look right?"
on_rejection: retry_with_feedback retry_with_feedback means the user can type feedback when rejecting, and the step re-runs with that feedback injected into the agent's prompt. This creates a human-in-the-loop refinement cycle.
role_override specialization. Execution profiles use role_override to repurpose general agents for specific tasks:
perspectives:
- agent: architect
required: true
role_override: "Produce architecture decision records and system design docs"
- agent: strategist
required: true
role_override: "Sequence the work into phases with dependency mapping"
- agent: operator
required: true
role_override: "Break phases into concrete engineering tasks with effort estimates"
- agent: sentinel
required: true
role_override: "Review all outputs for security, reliability, and maintainability risks" Note
The agent's base persona, cognition, and heuristics remain intact. The role_override layers a specific mission on top. Sentinel still thinks like Sentinel — it just knows its job in this profile is to review artifacts for risks, not to debate strategy.