Inhalt: Risiken · Entscheidungsmatrix · Vorab-Inspektion · Repro-Schritte · Zitierfähige Leitplanken · FAQ
Dieses Playbook richtet sich an Teams, die Python-Agenten mit Agno auf einem gemieteten Apple-Silicon-Host betreiben und alle Modell- und Toolpfade über einen OpenAI-kompatiblen Endpunkt bündeln wollen. Es ergänzt die Agno-versus-OpenAI-Agents-SDK-Matrix um die harte Randkonfiguration und verweist für Schema-Zwillings- und Pydantic-Muster auf PydanticAI am Gateway; für vergleichbare Orchestrierungsdisziplin siehe Strands Agents mit Gateway.
Drei wiederkehrende Produktionsrisiken
1) Der Agent registriert mehr oder andere Toolnamen als das Gateway — Aufrufe scheitern pseudozufällig mit 403 oder 422. 2) Ein einziges großes HTTP-Timeout maskiert Transport- und Ausführungsengpässe; Retries überlasten Unified Memory. 3) Volltext-Fehler mit Promptresten landen in zentralen Logs und erschweren DSGVO-konforme Reviews.
Entscheidungsmatrix: Schichten und Nachweis
Die folgende Tabelle ordnet Verantwortlichkeiten und typische Kennzahlen — konkrete Millisekunden ersetzen Sie durch Ihre Messreihe auf dem Remote-Knoten.
| Schicht | Aufgabe | Leitplankenbeispiel | Risiko ohne Gate | Nachweis im MR |
|---|---|---|---|---|
| Agno | Minimale Tool-Registrierung, Session-Policy | Nur Runbook-Tools, feste Rollen | Frei erfundene Funktionsnamen | Diff der Toolliste gegen Gateway-JSON |
| Gateway | Whitelist erzwingen, Auth-Header | Name → Handler, Bearer aus Datei | Bypass zu Rohanbieter-URLs | Negative Tests unbekannter Namen |
| Timeouts | Transport vs. Tool-Ausführung | connect < read < gateway_max | Hängende Worker, Retry-Stürme | Traces mit phase=transport|execute |
| Breaker | Fehlerfenster, Kühlzeit | 5 Fehler / 30 s, 20 s open | Kaskadierende Latenz | breaker.trip_rate im Dashboard |
| Envelope | Strukturierte Kurzfassung | code, request_id, hint | Secrets in Klartext | Redaction-Stichprobe |
Vorab-Inspektion (ohne Produktivlast)
Führen Sie auf dem Remote-Mac zuerst openclaw doctor aus und beheben Sie alle roten Prüfungen, bevor Sie Agno starten — dieselbe Routine eignet sich als Gate in CI für neue Images. Anschließend Health gegen den Loopback-Endpunkt mit einem Platzhalter-Bearer (kein echter Schlüssel im Shell-Verlauf): curl -fsS -H "Authorization: Bearer $(cat ./gateway.token)" http://127.0.0.1:PORT/health. Erst wenn Status und Version stimmen, binden Sie den Agno-Client per OPENAI_BASE_URL an denselben Host.
Ergänzend prüfen Sie DNS-Auflösung und Firewall-Profile für den Dienstbenutzer: der Gateway-Prozess darf nur auf die dokumentierten Upstream-Adressen zugreifen, nicht beliebig ins Internet. Dokumentieren Sie die Minor-OS-Version und den Python-Interpreter, damit Abnahmeberichte zwischen Wochen vergleichbar bleiben, falls Apple-Sicherheitsupdates TLS-Verhalten leicht verschieben.
Referenz: HTTP-Code vs. Diagnosephase
| Antwort | Typische phase | Maßnahme |
|---|---|---|
401 / 403 |
transport | Token-Datei, Header-Name, Uhrzeit auf dem Host |
422 |
schema | Whitelist-Namen und Argument-Schema gegen Gateway-Quelle diffen |
408 / 504 |
transport oder execute | Timeouts staffeln, Downstream-Kapazität messen |
| Breaker-open ohne HTTP-Body | circuit | Kühlzeit abwarten, Fehlerfenster in Logs auswerten |
Reproduzierbare Schritte und JSON-Konfiguration
Schritt 1 — Arbeitsraum: Eigenes Verzeichnis, virtuelle Umgebung, chmod 600 für .env und Token-Datei; keine Geheimnisse in Git.
Schritt 2 — Gateway-Whitelist (Ausschnitt): Zentral erlaubte Namen und interne Handler-Referenzen; Platzhalter bleiben wörtlich bis zur Deployment-Substitution.
{
"tools_allowlist": ["search_docs", "run_sql_readonly"],
"reject_unknown_tools": true,
"auth": { "bearer_token_file": "./gateway.token" }
}
Schritt 3 — Agno/OpenAI-Client: Basis-URL nur auf das Gateway; API-Key-Feld erhält einen internen Gateway-Token-Platzhalter, nie den Cloud-Anbieterschlüssel im Klartext auf dem Agenten-Host.
{
"OPENAI_BASE_URL": "http://127.0.0.1:8080/v1",
"OPENAI_API_KEY": "REPLACE_WITH_GATEWAY_TOKEN",
"request_timeout_seconds": { "connect": 5, "read": 45 }
}
Schritt 4 — Gateway-Obergrenze und Tool-Ausführung: Die äußere Deadline muss strikt über der Agno-Lesezeit liegen, damit der Client vor dem Server abbricht und Sie saubere phase-Werte im Log sehen.
{
"server": { "bind": "127.0.0.1", "port": 8080 },
"limits": { "max_request_seconds": 60, "tool_execute_seconds": 40 }
}
Schritt 5 — Circuit Breaker: Gleitendes Fenster, Schwellenwert und Kühlphase dokumentieren; Trip-Ereignisse mit request_id korrelieren.
{
"circuit_breaker": {
"error_window_seconds": 30,
"failure_threshold": 5,
"open_seconds": 20,
"count_http": [408, 429, 500, 502, 503, 504],
"count_schema_errors": true
}
}
Schritt 6 — Fehlerzusammenfassung an Agno: Das Gateway mappt Ausnahmen auf eine einheitliche JSON-Struktur; der Agent zeigt dem Aufrufer nur Kurztext und Handlungshinweis.
{
"error_envelope": {
"fields": ["request_id", "tool", "code", "phase", "short_message", "remediation_hint"],
"omit": ["api_key", "raw_prompt", "stack_trace"]
}
}
Zitierfähige Leitplanken für Abnahme und Audit
- Zitierbar 1: Jede Freigabe nennt in einer Zeile Gateway-Build, Agno-Paketversion und Hash der Whitelist-Datei.
- Zitierbar 2: Transport- und Ausführungs-Timeout sind getrennt konfiguriert und in Grafana (oder gleichwertig) als zwei Serien sichtbar.
- Zitierbar 3: Nach einem Breaker-Trip liegt ein Postmortem mit Trip-Rate, betroffener Toolname und Rollback-Referenz vor.
Öffentliche Einstiege ohne Login-Pflicht zum Lesen: Kauf und Miete, Preise, Hilfezentrum, Startseite und Tech-Blog.
Kurz-FAQ
Doppelte Validierung? Ja: Agno kann argumentieren, das Gateway erzwingt dennoch Namen und Schema an der Grenze. Breaker offen, Latenz normal? Prüfen Sie einen zweiten Client oder einen Health-Pfad, der nicht durch den Breaker zählt. Schlüsselrotation? Kurzlebige Tokens nur per Secret-Store; JSON-Beispiele behalten Platzhalter.
Kurz: doctor und Health vor dem ersten Agno-Run, Whitelist und Timeouts in Git versionieren, Breaker und Envelope messbar machen — dann ist Remote-Betrieb wiederholbar und auditierbar.