disclaw/tasks/DIS-153.md
Nick Tabeling cf5bf7daeb
Some checks failed
CI / build-and-test (ubuntu-latest) (pull_request) Has been cancelled
CI / build-and-test (windows-latest) (pull_request) Has been cancelled
CI / lint (pull_request) Has been cancelled
chore: add Phase 1.5 refinement tasks DIS-151 to DIS-154
DIS-151: Channel-Kategorisierung (aktiv/inaktiv/archiv) + Lifecycle
DIS-152: Gemappte Projektpfade fuer Agents (host:virtual)
DIS-153: Model-Auswahl pro Agent (Select-Menu + --model Flag)
DIS-154: Discord Rich Features (Reactions, Dateien, Input-Limit)

Forgejo Issues #54-#57 angelegt. BOARD.md aktualisiert.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 11:19:28 +02:00

2.3 KiB

id status phase priority labels branch assignee started pr merged
DIS-153 ready 1.5 p2
phase:1.5
type:feat
priority:p2
refinement/model-selection null null null 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)

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

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 <id> zu den Claude-CLI-Args hinzufügen
  • Fallback: wenn kein Model in agent.yamlclaude-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 <id> 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.