Skip to content

Agent OS: unify profile taxonomy and config contract #573

@Q00

Description

@Q00

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:

  1. Runtime backend — the concrete harness/process used for a stage, e.g. claude, codex, opencode, hermes, gemini.
  2. Stage runtime routing — which runtime backend serves interview, execute, evaluate, reflect, etc.
  3. 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.
  4. 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or meaningful improvementneeds-designMulti-PR epic or architectural change, needs human planning

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions