--- id: DIS-153 status: ready phase: 1.5 priority: p2 labels: [phase:1.5, type:feat, priority:p2] branch: refinement/model-selection assignee: null started: null pr: null merged: null --- # DIS-153: Model-Auswahl pro Agent ## Ziel Beim Erstellen eines Agents kann das Claude-Modell ausgewählt werden. `/new-agent` zeigt ein Discord-Select-Menü mit verfügbaren Modellen. Der Agent verwendet ausschließlich das konfigurierte Modell. ## Kontext Verschiedene Agents haben unterschiedliche Anforderungen: ein einfacher Research-Agent kommt mit Haiku aus, ein Code-Agent braucht Sonnet oder Opus. ## Scope ### Verfügbare Modelle (hardcodierte Allowlist) ```typescript export const ALLOWED_MODELS = [ { id: "claude-opus-4-6", label: "Claude Opus 4.6 (leistungsstark, langsamer)" }, { id: "claude-sonnet-4-6", label: "Claude Sonnet 4.6 (Standard, empfohlen)" }, { id: "claude-haiku-4-5-20251001", label: "Claude Haiku 4.5 (schnell, günstig)" }, ] as const; export type AllowedModel = typeof ALLOWED_MODELS[number]["id"]; ``` ### `agent.yaml` Erweiterung ```yaml name: my-agent channel_id: "123456789" role: Developer model: claude-sonnet-4-6 # neu, default: claude-sonnet-4-6 ``` ### `/new-agent`-Command (`src/commands/new-agent.ts`) - Discord `StringSelectMenuBuilder` mit den 3 Modellen als Optionen - Nach Auswahl: `model` in `agent.yaml` speichern - Kein Freitext-Feld — nur Auswahl aus der Allowlist ### `src/agent/runner.ts` - `agent.yaml` lesen und `model`-Feld auslesen - `--model ` zu den Claude-CLI-Args hinzufügen - Fallback: wenn kein Model in `agent.yaml` → `claude-sonnet-4-6` ### Zod-Schema (`src/agent/schema.ts`) - `model: z.enum([...ALLOWED_MODELS.map(m => m.id)]).default("claude-sonnet-4-6")` ## Definition of Done - [ ] `agent.yaml` hat `model`-Feld (Zod-validiert, Allowlist) - [ ] `/new-agent` zeigt Select-Menü (kein Freitext) - [ ] Runner übergibt `--model ` an Claude CLI - [ ] Ungültiges Modell in `agent.yaml` → klare Fehlermeldung beim Start - [ ] Unit-Test: Runner-Args enthalten `--model` - [ ] `npm run build && npm test` grün ## Dateien (erwartet) - `src/agent/schema.ts` - `src/agent/identity.ts` - `src/commands/new-agent.ts` - `src/agent/runner.ts` - `src/config/models.ts` (Allowlist) - `tests/unit/runner-model.test.ts` ## Abhängigkeiten Keine harten. Kann parallel zu DIS-151 laufen.