Context
The current Agent OS PR stack is using the word profile for several different concepts:
Each individual concept is useful, but the public config vocabulary is currently overloaded. This creates stack-level conflict: two PRs can both be correct locally while still assigning incompatible meanings to the same key.
This issue should lock the Agent OS profile taxonomy before more runtime/profile PRs harden around incompatible names.
Problem
profile currently means at least four things:
- Runtime backend — the concrete harness/process used for a stage, e.g.
claude, codex, opencode, hermes, gemini.
- Stage runtime routing — which runtime backend serves
interview, execute, evaluate, reflect, etc.
- Provider-neutral LLM/task profile — an Ouroboros-level profile such as
fast, standard, deep, frontier that can specify model, turn budget, reasoning effort, temperature, and provider-specific mappings.
- Backend-native profile — a provider/harness-owned anchor such as Codex CLI
--profile ouroboros-standard.
When these are all called runtime_profile, users and maintainers cannot tell whether a config block selects a runtime, selects a model profile, or maps to a backend-native profile.
Proposed vocabulary
Recommended naming, subject to maintainer revision:
| Concept |
Proposed name |
Example |
| Concrete harness/backend |
runtime_backend |
codex, opencode, claude_code |
| Stage -> runtime binding |
stage_runtime or runtime_routing |
interview: codex, evaluate: claude_code |
| Provider-neutral LLM/task profile |
llm_profile / task_profile |
fast, standard, deep, frontier |
| Role -> LLM/task profile binding |
llm_role_profiles |
qa: frontier, reflect: deep |
| Backend-native profile anchor |
provider_profile / codex_profile |
codex: ouroboros-frontier |
| Legacy Codex worker profile from #505 |
codex_profile or migrated into llm_profiles |
ouroboros-worker |
The important invariant is not the exact spelling above. The invariant is: one public config key must have one semantic meaning.
Candidate config shape
One possible shape:
orchestrator:
runtime_backend: claude
stage_runtime:
default: claude
stages:
interview: codex
execute: opencode
evaluate: claude_code
reflect: hermes
llm_profiles:
fast:
max_turns: 1
temperature: 0.0
provider_profiles:
codex: ouroboros-fast
standard:
max_turns: 3
provider_profiles:
codex: ouroboros-standard
deep:
max_turns: 8
provider_profiles:
codex: ouroboros-deep
frontier:
max_turns: 12
provider_profiles:
codex: ouroboros-frontier
llm_role_profiles:
interview: deep
implementation: standard
evaluation: deep
qa: frontier
reflect: deep
Alternative shapes are fine if they preserve the separation between stage routing, LLM/task profile selection, and backend-native profile anchors.
Backward compatibility requirements
Acceptance criteria
References
Context
The current Agent OS PR stack is using the word
profilefor several different concepts:orchestrator.runtime_profileas a Codex backend profile selector, e.g.worker -> --profile ouroboros-worker.orchestrator.runtime_profileas a stage-to-runtime routing object, e.g.interview -> codex,evaluate -> claude_code.--profile.Each individual concept is useful, but the public config vocabulary is currently overloaded. This creates stack-level conflict: two PRs can both be correct locally while still assigning incompatible meanings to the same key.
This issue should lock the Agent OS profile taxonomy before more runtime/profile PRs harden around incompatible names.
Problem
profilecurrently means at least four things:claude,codex,opencode,hermes,gemini.interview,execute,evaluate,reflect, etc.fast,standard,deep,frontierthat can specify model, turn budget, reasoning effort, temperature, and provider-specific mappings.--profile ouroboros-standard.When these are all called
runtime_profile, users and maintainers cannot tell whether a config block selects a runtime, selects a model profile, or maps to a backend-native profile.Proposed vocabulary
Recommended naming, subject to maintainer revision:
runtime_backendcodex,opencode,claude_codestage_runtimeorruntime_routinginterview: codex,evaluate: claude_codellm_profile/task_profilefast,standard,deep,frontierllm_role_profilesqa: frontier,reflect: deepprovider_profile/codex_profilecodex: ouroboros-frontiercodex_profileor migrated intollm_profilesouroboros-workerThe important invariant is not the exact spelling above. The invariant is: one public config key must have one semantic meaning.
Candidate config shape
One possible shape:
Alternative shapes are fine if they preserve the separation between stage routing, LLM/task profile selection, and backend-native profile anchors.
Backward compatibility requirements
orchestrator.runtime_backendbehavior must remain valid.orchestrator.runtime_profile: workerinstalls need an explicit migration path or compatibility shim.Acceptance criteria
orchestrator.runtime_profile.References