Multi-Provider Architecture¶
Agents run on Claude, OpenAI (Codex), or Gemini. Provider selection is per-agent in the registry.
Provider Distribution¶
- Claude (51 agents): Primary. CLI:
@anthropic-ai/claude-code - OpenAI/Codex (4): margot, benjamin, jouke, dinand. CLI:
@openai/codex - Gemini (1): felice. CLI:
@google/gemini-cli
Source of truth for agent→provider mapping: ge-ops/master/AGENT-REGISTRY.json (provider + providerModel fields)
Config Files¶
| File | Controls | Read By |
|---|---|---|
config/providers/claude.yaml |
Claude CLI execution profile | Executor (provider_config.py) |
config/providers/openai.yaml |
Codex CLI execution profile | Executor (provider_config.py) |
config/providers/gemini.yaml |
Gemini CLI execution profile | Executor (provider_config.py) |
config/provider-instructions/AGENTS.md |
Codex native instructions | Injected into Codex sessions |
config/provider-instructions/GEMINI.md |
Gemini native instructions | Injected into Gemini sessions |
config/provider-settings/codex-config.toml |
Codex CLI config | Codex CLI reads at startup |
config/provider-settings/gemini-settings.json |
Gemini CLI config | Gemini CLI reads at startup |
How It Works¶
- Executor receives trigger for agent
- Fetches agent config from admin-ui API (includes provider + model)
provider_config.pyloads the provider YAML profile- Profile defines: CLI command template, native config paths, constitution handling
- Prompt builder adapts: Claude gets full constitution; OpenAI/Gemini get universal principles only (quality gate in native instructions file)
- CLI invoked via PTY with provider-specific flags
Constitution Handling¶
- Claude: Full constitution in prompt (
constitution_handling: full) - OpenAI/Gemini: Universal principles (1-5) in prompt; quality gate + turn budget in native instructions file (
constitution_handling: universal_only)
Changing an Agent's Provider¶
- Update
providerandproviderModelin AGENT-REGISTRY.json - Update via admin-ui:
PATCH /api/agents/{id}/provider - Executor picks up the change on next trigger (no restart needed)