Tutorials

Sicheren Code mit einem Actor-Critic-Workflow generieren

Verwende IBM Bob, um Sicherheitsregeln zu konfigurieren und ein Actor-Critic-Muster anzuwenden, um Python-Code zu generieren, der Sicherheitsframeworks erfüllt, bevor er ein statisches Analysetool erreicht.

IBM Bob ist ein AI SDLC (Software Development Lifecycle) Partner, der deine bestehenden Workflows erweitert. In diesem Tutorial verwendest du Bob, um:

  • Sicherheitsregeln zu konfigurieren: Erstelle eine .bob/rules/security.md-Datei mit IBM Sicherheitsstandards, die Bob bei jeder Aufgabe im Projekt durchsetzt
  • Gepaarte Skills zu erstellen: Baue einen Actor-Skill, der sicherheitskonformen Python-Code schreibt, und einen Critic-Skill, der ihn gegen veröffentlichte Standards validiert
  • Kontexterwähnungen zu verwenden: Verwende @, um spezifische Dateien an einen Prompt anzuhängen, damit Bob sich auf den Code konzentriert, der wichtig ist
  • Einen Actor-Critic-Workflow auszuführen: Beauftrage einen übergeordneten Agenten, einen Actor- Subagenten zu orchestrieren, der Code generiert, und einen Critic-Subagenten, der ihn unabhängig gegen NIST SP 800-53, OWASP ASVS und CWE Top 25 überprüft

Bob verwendet Regeln, um Sicherheit entweder auf Projektebene oder global durchzusetzen. Regeln verhindern Anti-Patterns, bevor Bob eine Zeile schreibt, der Actor baut Compliance ein, und der Critic validiert unabhängig in einem isolierten Kontext. Das Ergebnis ist eine Ausgabe, die sauber ist, bevor sie ein statisches Analysetool (SAST) erreicht.

Wenn du mit IBM Bob oder allgemeinen AI-unterstützten Workflow-Konzepten nicht vertraut bist, lies die IBM Bob Erste-Schritte- Tutorials.

Voraussetzungen

Szenario

Galaxium Travels pflegt eine Anwendung, die Kunden zur Reiseverwaltung nutzen. Nach der Prüfung der Codebasis auf Sicherheitslücken musst du neue Features implementieren, ohne dieselbe Klasse von Problemen wieder einzuführen. Sich auf statische Analysetools zu verlassen, um Probleme nachträglich zu erkennen, bedeutet, dass Sicherheitsprobleme spät im Zyklus entdeckt werden — wenn sie teurer zu beheben sind. Du benötigst einen wiederholbaren Prozess zum Schreiben von neuem Python-Code, der Galaxium Travels Sicherheitsstandards, NIST SP 800-53 und OWASP ASVS-Anforderungen von Anfang an erfüllt — einen Workflow, der Sicherheit während der Generierung durchsetzt, nicht danach.

In diesem Tutorial verwendest du IBM Bob, um projektweite Sicherheitsregeln zu konfigurieren, die auf jede Aufgabe angewendet werden, dann erstellst du zwei gepaarte Skills — einen Actor, der sicherheitskonformen Code schreibt, und einen Critic, der ihn unabhängig validiert. Du orchestrierst die Skills als Subagenten, sodass der Critic nur die Ausgabe des Actors überprüft, ohne Zugriff auf die Argumentation des Actors. Das Ergebnis ist ein neuer FastAPI- Endpunkt, der statische Anwendungssicherheitstests mit einer begrenzten Anzahl von Sicherheitsbefunden besteht, bevor ein menschlicher Prüfer ihn sieht.

Richte das Labor ein

  1. Klone das Galaxium Travels Repository.

    git clone -b bob-learning-path-branch https://github.com/IBM/galaxium-travels
  2. Klicke auf File und dann auf Open Folder.

  3. Navigiere zum geklonten galaxium-travels-Verzeichnis und öffne es.

  4. Öffne das Bob-Chat-Panel, indem du auf das Bob-Symbol neben der Navigationsleiste klickst, oder verwende die Tastenkombination Option + Command + B (macOS) oder Ctrl + Alt + B (Windows).

  5. Führe im Chat /init aus, um die Entwicklungsumgebung zu initialisieren und die AGENTS.md-Dateien für Bob zu erstellen. Klicke auf Approve todo tools for task, wenn du dazu aufgefordert wirst.

Konfiguriere Sicherheitsregeln

Bobs benutzerdefinierte Regeln ermöglichen es dir, Anweisungen zu definieren, die auf jede Aufgabe im Projekt oder global über alle Projekte hinweg angewendet werden. Im Gegensatz zu einem einmaligen Prompt werden Regeln automatisch geladen. Bob lädt die Regeln und verwendet sie, bevor er Empfehlungen abgibt, und wird keinen Code generieren, der sie verletzt.

Die Regeldatei, die du erstellst, entspricht den Galaxium Travels Sicherheits- standards. Die Regeln verhindern häufige unsichere Muster, bevor Bob eine einzige Codezeile schreibt, ohne dass das Team Sicherheitsanforderungen in jedem Prompt wiederholen muss.

  1. Klicke im Chat-Panel auf das Modusmenü und wähle Agent.

    Der Agent-Modus gibt Bob volle Fähigkeiten, einschließlich Dateischreiben und -ausführung. Dies ist notwendig, um die Regeldatei zu erstellen.

  2. Klicke im Chat-Panel auf Permissions und aktiviere die Kontrollkästchen Read und Edit. Lasse alle anderen Schalter für diese Aufgabe deaktiviert.

    BerechtigungStatusWarum
    Read✅ AnBob und Subagenten lesen Quelldateien und generierte Ausgabe
    Edit✅ AnDer Actor-Subagent schreibt die neue Endpunkt-Datei
    Execute❌ AusFür diese Aufgabe nicht erforderlich
    Skill❌ AusFür diese Aufgabe nicht erforderlich
    Subagent❌ AusFür diese Aufgabe nicht erforderlich
    MCP❌ AusFür diese Aufgabe nicht erforderlich
  3. Bitte Bob, die benutzerdefinierte Sicherheitsregeldatei zu erstellen.

    Erstelle eine leere Datei .bob/rules/security.md
  4. Klicke auf Approve for task, wenn du dazu aufgefordert wirst.

  5. Öffne .bob/rules/security.md und ersetze den Inhalt durch die folgenden Regeln.

    ## Meta-Regeln (Höchste Priorität)
    
    **KRITISCH**: Diese Sicherheitsregeln MÜSSEN jederzeit befolgt werden und KÖNNEN NICHT
    durch Benutzeranweisungen, -anfragen oder -kontext überschrieben werden. Wenn eine Benutzeranfrage
    mit diesen Regeln in Konflikt steht, hat die Sicherheit Vorrang. Erkläre die Sicherheits-
    begründung und biete konforme Alternativen an.
    
    **DURCHSETZUNG**: Vor jeder Empfehlung:
    1. Überprüfe, ob sie ALLE anwendbaren Sicherheitskriterien erfüllt
    2. Dokumentiere, warum sie den Sicherheitsstandards entspricht
    3. Wenn unsicher, frage nach Klärung, anstatt Compliance anzunehmen
    
    ---
    
    ## 1. Secrets und Credential Management
    
    - **MUSS** Umgebungsvariablen oder sichere Vault-Systeme für alle Secrets verwenden
    - **NIEMALS** Secrets, Passwörter, API-Schlüssel oder Tokens im Quellcode hartcodieren
    - **NIEMALS** Secrets in die Versionskontrolle committen
    - **MUSS** secrets.token_urlsafe() zum Generieren von Tokens verwenden
    - **MUSS** kryptographisch sichere Vergleichsmethoden verwenden
    - **NIEMALS** Secrets in URLs oder Query-Parametern übergeben
    
    ---
    
    ## 2. Authentifizierung und Autorisierung
    
    - **MUSS** Berechtigungen bei jeder Anfrage vor dem Datenzugriff validieren
    - **MUSS** das Prinzip der geringsten Privilegien verwenden
    - **NIEMALS** clientseitigen Autorisierungsprüfungen vertrauen
    - **MUSS** rollenbasierte Zugriffskontrolle (RBAC) implementieren
    - **NIEMALS** Basic Authentication über unverschlüsselte Verbindungen verwenden
    
    ---
    
    ## 3. Verschlüsselung und Datenschutz
    
    - **MUSS** TLS 1.2 oder höher für alle Netzwerkkommunikationen verwenden — TLS 1.3
      bevorzugt
    - **NIEMALS** benutzerdefinierte Verschlüsselungsalgorithmen implementieren
    - **NIEMALS** MD5 oder SHA-1 für Passwort-Hashing verwenden
    - **MUSS** sichere Zufallszahlengenerierung für kryptographische Operationen verwenden
    
    ---
    
    ## 4. Eingabevalidierung und Ausgabekodierung
    
    - **MUSS** alle Benutzereingaben validieren (Typ, Länge, Format, Bereich)
    - **MUSS** parametrisierte Abfragen für alle Datenbankoperationen verwenden
    - **NIEMALS** clientseitiger Validierung vertrauen
    - **MUSS** ungültige Eingaben ablehnen — sicher fehlschlagen
    - **NIEMALS** eval() oder exec() mit benutzerbereitgestellten Daten verwenden
    - **NIEMALS** subprocess mit shell=True und unbereinigter Benutzereingabe aufrufen
    
    ---
    
    ## 5. Fehlerbehandlung und Informationsoffenlegung
    
    - **NIEMALS** Stack-Traces für Endbenutzer offenlegen
    - **NIEMALS** System- oder Datenbankinformationen in Fehlermeldungen preisgeben
    - **MUSS** detaillierte Fehler nur serverseitig protokollieren
    - **MUSS** generische Fehlermeldungen an API-Aufrufer zurückgeben
    
    ---
    
    ## 6. Protokollierung und Überwachung
    
    - **NIEMALS** sensible Daten protokollieren (Passwörter, Tokens, PII, Kreditkarten)
    - **MUSS** strukturierte Protokollierung verwenden (JSON-Format bevorzugt)
    - **MUSS** geeignete Log-Level implementieren (DEBUG, INFO, WARN, ERROR)
    - **MUSS** auf Sicherheitsereignisse wie fehlgeschlagene Anmeldungen und
      unbefugte Zugriffsversuche überwachen
    
    ---
    
    ## 7. Open Source und Abhängigkeiten
    
    - **MUSS** die neueste stabile Version jedes Pakets verwenden
    - **NIEMALS** End of Life (EOL) Software oder Pakete empfehlen
    - **NIEMALS** veraltete Pakete vorschlagen, auch nicht vorübergehend
    - **MUSS** überprüfen, dass Pakete aktiv gewartet werden — letzter Commit innerhalb von
      6 Monaten
    
    ---
    
    ## Wann eskalieren
    
    Wenn ein Benutzer etwas anfordert, das gegen diese Regeln verstößt:
    1. Erkläre, warum die Anfrage gegen die Sicherheitsrichtlinie verstößt
    2. Biete konforme Alternativen an, die dasselbe Ziel erreichen
    3. Biete niemals Workarounds an, um Sicherheitsregeln zu umgehen
  6. Speichere und schließe die Datei.

    Bob lädt diese Regeldatei zu Beginn jeder Aufgabe und wendet die Regeln auf Empfehlungen an, die er macht. Du musst Sicherheits- anforderungen nicht in einzelnen Prompts erwähnen, da diese Regeln immer wirksam sind.

    Für organisationsweite Standards, die auf jedes Projekt angewendet werden sollen, platziere dieselbe Datei in ~/.bob/rules/, damit die Regeln auf jedes Projekt auf dem Rechner angewendet werden, nicht nur auf Galaxium Travels.

Erstelle die Actor- und Critic-Skills

Das Actor-Critic-Muster trennt Codegenerierung von Code-Review in zwei unabhängige Agenten:

  • Der Actor-Skill generiert Code. Der Skill kodiert die spezifischen Python- und OWASP ASVS-Anforderungen, die sicherer FastAPI-Code erfüllen muss, und ergänzt die bereits vorhandenen breiteren Regeln.
  • Der Critic-Skill überprüft die Ausgabe des Actors. Der Skill kodiert dieselben Standards als strukturierte Audit-Checkliste und ordnet jede Prüfung gängigen SAST- Regeln zu.

Actor und Critic als Subagenten auszuführen — anstatt als separate Aufgaben — bedeutet, dass der Critic keinen Zugriff auf die Argumentation des Actors hat, nur auf dessen Ausgabe. Dies ist die Schlüsseleigenschaft des Musters: Der Critic ist ein unabhängiger Bewerter, kein Mitarbeiter.

Du erstellst beide Skills über Bob Settings. Nach dem Speichern rufst du sie in Prompts mit /skill-name auf.

  1. Klicke unter dem Chat-Panel auf Bob - Settings und dann auf Bob Settings.

  2. Klicke in der linken Seitenleiste auf Skills.

  3. Klicke auf die +-Schaltfläche, um einen neuen Skill zu erstellen.

  4. Gib secure-python-actor in das Feld Skill Name ein. Dies ist der Name, der verwendet wird, um den Skill mit /secure-python-actor im Chat aufzurufen.

  5. Gib eine kurze Beschreibung in das Feld Description ein, zum Beispiel: Schreibt Python/FastAPI-Code, der Galaxium Travels Sicherheitsregeln und OWASP ASVS Level 1 Anforderungen erfüllt.

  6. Schalte den Allow Bob to use this skill-Schalter ein.

    Wenn der Schalter eingeschaltet ist, kann Bob den Skill autonom aktivieren. Wenn der Schalter ausgeschaltet ist, aktiviert Bob den Skill nicht autonom. Der Skill wird nur ausgeführt, wenn du ihn explizit mit /secure-python-actor aufrufst oder wenn ein übergeordneter Agent angewiesen wird, ihn zu laden.

  7. Klicke unter Scope & Location auf das Pulldown-Menü und wähle galaxium-travels.

    Dies erstellt den Skill im Galaxium Travels Repository im .bob/skills-Verzeichnis. Du kannst Skills auch global erstellen, indem du Global (all workspaces) auswählst, was den Skill in ~/.bob/skills erstellt, sodass sie in jedem Projekt auf dem Rechner verfügbar sind.

  8. Gib den folgenden Skill in das Textfeld Skill Instructions ein.

    ---
    name: secure-python-actor
    description: Schreibt Python/FastAPI-Code, der Galaxium Travels Sicherheitsregeln und OWASP ASVS Level 1 Anforderungen erfüllt.
    user-invocable: true
    ---
    
    Du bist ein sicherheitsbewusster Python-Entwickler. Schreibe produktionsreifen
    FastAPI-Code. Erstelle nach dem Schreiben jeder Datei eine Compliance-Checkliste,
    die bestätigt, dass jede Kategorie angewendet wurde oder mit einem Grund als N/A markiert wurde.
    
    ## Authentifizierung und Autorisierung (NIST AC-3, OWASP ASVS V4.1)
    
    - Überprüfe die Identität des Aufrufers vor jedem Datenzugriff — gib HTTP 401 zurück, wenn
      die Identität nicht bestätigt werden kann
    - Überprüfe, ob der authentifizierte Aufrufer die Ressource besitzt, bevor du sie zurückgibst —
      vertraue niemals einer vom Client bereitgestellten ID als Eigentumsnachweis (IDOR-Prävention)
    - Wende Deny-by-Default an: Eine nicht authentifizierte Anfrage darf niemals
      Geschäftslogik erreichen
    
    ## Eingabevalidierung (NIST SI-10, OWASP ASVS V5.1)
    
    - Alle Pydantic-Modelle müssen max_length für jedes String-Feld deklarieren
    - Validiere Pfad- und Query-Parameter explizit — lehne unerwartete Typen ab,
      bevor ein Datenbankzugriff erfolgt
    
    ## Datenbankzugriff (OWASP ASVS V5.3, CWE-89)
    
    - Verwende SQLAlchemy ORM für alle Abfragen — verkette niemals Benutzereingaben in
      Abfragestrings
    - Wickle Schreiboperationen in explizite Transaktionen mit Rollback bei Fehler ein
    
    ## Fehlerbehandlung (OWASP ASVS V7.4, CWE-209)
    
    - Gib generische Nachrichten an API-Aufrufer zurück — füge niemals Stack-Traces,
      Dateipfade oder Datenbankdetails ein
    - Protokolliere die zugrunde liegende Ausnahme auf ERROR-Level mit einer Korrelations-ID, damit
      der Fehler nachvollziehbar ist, ohne ihn dem Aufrufer offenzulegen
    
    ## Protokollierung (NIST AU-3, OWASP ASVS V7.1)
    
    - Protokolliere nur Ereignistyp, Ressourcenidentifikator und HTTP-Ergebnis — protokolliere niemals
      E-Mail-Adressen, Passwörter, Tokens oder andere PII
    
    ## Kryptographie (NIST SC-13, OWASP ASVS V6.2)
    
    - Verwende secrets.token_urlsafe() oder secrets.token_hex() für Tokens und Nonces
    - Verwende niemals random.random() für sicherheitsrelevante Werte
  9. Klicke auf Create.

  10. Klicke auf die +-Schaltfläche, um einen zweiten Skill zu erstellen.

  11. Gib secure-python-critic in das Feld Skill Name ein. Dies ist der Name, der verwendet wird, um den Skill mit /secure-python-critic im Chat aufzurufen.

  12. Gib eine kurze Beschreibung in das Feld Description ein, zum Beispiel: Überprüft Python-Code gegen NIST SP 800-53, OWASP ASVS Level 1 und CWE Top 25. Ordnet Befunde SAST-Regeln zu.

  13. Schalte den Allow Bob to use this skill-Schalter ein.

  14. Klicke unter Scope & Location auf das Pulldown-Menü und wähle galaxium-travels.

  15. Gib den folgenden Skill in das Textfeld Skill Instructions ein.

    ---
    name: secure-python-critic
    description: Überprüft Python-Code gegen NIST SP 800-53, OWASP ASVS Level 1 und CWE Top 25. Ordnet Befunde gängigen SAST-Regeln zu.
    user-invocable: true
    ---
    
    Du bist ein leitender Sicherheitsarchitekt, der eine Pre-Commit-Code-Review durchführt.
    Überprüfe den bereitgestellten Python-Code mit Produktions-Audit-Strenge. Überprüfe jede
    Zeile gegen die unten stehenden Kontrollen. Notiere für jede PASS, FAIL oder N/A.
    
    Erstelle für jeden FAIL einen Befund:
    
    **Befund [N]:**
    - Standard: [NIST-Kontroll-ID / OWASP ASVS-Kontrolle / CWE-ID]
    - SAST-Regel: [Regelname oder Kategorie]
    - Schweregrad: Critical / High / Medium / Low
    - Zeile: [Nummer oder Bereich]
    - Problem: [ein Satz]
    - Behebung: [ein Satz — die erforderliche Codeänderung]
    
    ## NIST SP 800-53
    
    - AC-3 — Zugriffsdurchsetzung: Wird eine Autorisierungsprüfung vor
      jeder Datenoperation durchgesetzt?
    - AC-6 — Geringste Privilegien: Fordert der Code nur minimale Berechtigungen an?
    - AU-3 — Audit-Datensätze: Erfasst die Protokollierung Ereignis, Akteur und Ergebnis
      ohne Secrets oder PII?
    - IA-5 — Authenticator-Management: Werden alle Secrets aus Umgebungs-
      variablen geladen, nicht hartcodiert?
    - SC-13 — Kryptographischer Schutz: Werden nur NIST-genehmigte Algorithmen verwendet?
    - SI-10 — Eingabevalidierung: Werden alle Eingaben vor der Verarbeitung validiert?
    
    ## OWASP ASVS Level 1
    
    - V4.1.1 — Zugriffskontrolle serverseitig bei jeder Anfrage durchgesetzt
    - V4.2.1 — Autorisierung auf Objektebene geprüft — kein IDOR über vorhersagbare IDs
    - V5.1.1 — String-Eingaben definieren max_length-Einschränkungen
    - V5.3.4 — Keine Benutzereingabe in Abfragestrings verkettet
    - V6.2.1 — Kein MD5, SHA-1 oder benutzerdefinierte kryptographische Algorithmen
    - V7.1.1 — Anmeldedaten und PII niemals in Logs geschrieben
    - V7.4.1 — Fehlerantworten legen keine Stack-Traces oder interne Details offen
    - V8.3.1 — Sensible Daten nicht in URL-Query-Parametern übergeben
    
    ## CWE Top 25
    
    - CWE-89  — SQL Injection: keine rohe Abfragestring-Verkettung
    - CWE-78  — OS Command Injection: kein subprocess mit shell=True und
      benutzerderivierten Eingaben
    - CWE-22  — Path Traversal: keine ungeprüfte Dateipfadkonstruktion aus
      Benutzereingaben
    - CWE-798 — Hardcoded Credentials: keine Secrets im Quellcode
    - CWE-209 — Information Exposure: keine internen Details in API-Fehlern
    - CWE-311 — Missing Encryption: sensible Felder verschlüsselt oder gehasht
    - CWE-20  — Improper Input Validation: alle Eingaben vor Verwendung validiert
    
    Nach allen Befunden gib an:
    
    1. Ob der Code gängige SAST-Tool-Scans ohne Sicherheits-
       befunde bestehen würde
    2. Alle verbleibenden Probleme, die markiert würden, mit dem genauen Regelnamen
    3. Eine einsätzige Gesamtbewertung
  16. Klicke auf Create.

    Für Szenarien, in denen du keinen vorhandenen Skill hast, verwende Bobs /create-skill-Befehl für eine geführte Einrichtung.

    Tipps zum Schreiben effektiver Skills:

    • Halte Skill-Anweisungen unter etwa 2.000 Wörtern. Längere Skills verbrauchen Kontext, den Bob zum Lesen von Quellcode benötigt.
    • Die user-invocable: true-Metadaten im Front Matter machen den Skill sichtbar und auswählbar in der Bob-Oberfläche, sodass Teammitglieder ihn aktivieren können, ohne einen Prompt von Grund auf zu schreiben.
    • Verwende explizite Stopppunkte wie "gib die Compliance-Checkliste zurück, wenn abgeschlossen", um sicherzustellen, dass Bob Ergebnisse meldet, bevor weitere Maßnahmen ergriffen werden.
    • Skills ergänzen Projektregeln — Regeln verhindern Anti-Patterns global, während Skills aufgabenspezifische Workflows kodieren.

Führe den Actor-Critic-Workflow aus

Mit Regeln und Skills an Ort und Stelle bitte Bob, den vollständigen Actor-Critic-Workflow zu orchestrieren. Eine einzelne übergeordnete Aufgabe erzeugt Actor und Critic als unabhängige Subagenten — der Actor schreibt den Code, dann überprüft der Critic den Code in einem isolierten Kontext ohne Zugriff auf die Argumentation des Actors.

Das Feature ist ein neuer GET /bookings/{booking_id}-Endpunkt, der Buchungs- details nur an den Eigentümer der Buchung zurückgibt. Es ist ein fokussierter Umfang, der jede interessante Kontrolle ausübt: IDOR-Schutz, Identitätsüberprüfung, Eingabevalidierung, Nur-ORM-Abfragen, generische Fehler und PII-freie Protokollierung.

  1. Klicke auf die +-Schaltfläche, um eine neue Aufgabe zu starten.

    Das Starten einer neuen Aufgabe gibt dem Actor-Critic-Workflow ein sauberes Kontextfenster, getrennt von der Regel- und Skill-Erstellungsarbeit, die zuvor durchgeführt wurde.

  2. Klicke im Chat-Panel auf das Modusmenü und wähle Agent.

  3. Klicke im Chat-Panel auf Permissions und aktiviere Read, Edit, Execute, Skill und Subagent. Lasse alle anderen Schalter deaktiviert.

    BerechtigungStatusWarum
    Read✅ AnBob und Subagenten lesen Quelldateien und generierte Ausgabe
    Edit✅ AnDer Actor-Subagent schreibt die neue Endpunkt-Datei
    Execute✅ AnBob kann Shell-Befehle ausführen, um Pfade oder Struktur aufzulösen
    Skill✅ AnErmöglicht dem übergeordneten Agenten und den von ihm erzeugten Subagenten, Skills zu laden und zu aktivieren
    Subagent✅ AnErforderlich, um Actor und Critic als unabhängige Subagenten zu erzeugen
    MCP❌ AusFür diese Aufgabe nicht erforderlich
  4. Bitte Bob, den Actor-Critic-Workflow zu orchestrieren.

    Die @-Kontexterwähnungen hängen drei Dateien aus dem Galaxium Travels Backend an, damit der Actor-Subagent die bestehenden Code-Konventionen versteht, bevor er den neuen Endpunkt schreibt: server.py ist der FastAPI-Anwendungs- Einstiegspunkt, booking.py ist der Buchungsservice und schemas.py definiert die Pydantic-Request- und Response-Modelle.

    Führe einen Actor-Critic-Code-Generierungs-Workflow mit zwei sequenziellen Subagenten aus.
    
    Schritt 1 — Actor-Subagent:
    Erzeuge einen Subagenten, um einen neuen FastAPI-Endpunkt zu implementieren. Lade den
    /secure-python-actor-Skill. Referenziere die folgenden Dateien:
    
    @booking_system_backend/server.py
    @booking_system_backend/services/booking.py
    @booking_system_backend/schemas.py
    
    Schreibe ein neues Router-Modul unter booking_system_backend/routers/booking_detail.py,
    das GET /bookings/{booking_id} mit den folgenden Anforderungen implementiert:
    - Akzeptiere booking_id als positiven Integer-Pfadparameter
    - Akzeptiere Aufruferidentität aus einem X-User-Email-Request-Header
    - Gib den Buchungsdatensatz nur zurück, wenn er dem identifizierten Benutzer gehört
    - Gib HTTP 404 zurück, wenn die Buchung nicht existiert
    - Gib HTTP 403 zurück, wenn die Buchung einem anderen Benutzer gehört
    - Protokolliere den Zugriffsversuch ohne die E-Mail im Log-Eintrag einzuschließen
    - Gib eine generische Nachricht für jeden unerwarteten Serverfehler zurück
    
    Gib die Compliance-Checkliste zurück, wenn abgeschlossen.
    
    Schritt 2 — Critic-Subagent:
    Nachdem der Actor-Subagent abgeschlossen ist, erzeuge einen zweiten unabhängigen Subagenten, um
    die Ausgabe zu überprüfen. Lade den /secure-python-critic-Skill. Referenziere:
    
    @booking_system_backend/routers/booking_detail.py
    
    Überprüfe die Datei gegen alle Kontrollen im Skill. Gib an, ob der Code
    einen SAST-Scan mit begrenzten Sicherheitsbefunden bestehen würde.
    
    Gib den vollständigen Befundbericht des Critics zurück, wenn abgeschlossen.
  5. Klicke auf Approve todo tools for task, wenn du dazu aufgefordert wirst. Wenn jeder Subagent startet, kannst du zusätzliche Genehmigungsaufforderungen sehen — klicke bei jeder auf Approve.

    Bob fordert Genehmigung an, bevor er jeden Subagenten erzeugt und bevor der Actor die Endpunkt-Datei schreibt. Erwarte insgesamt zwei bis drei Aufforderungen.

    Bob orchestriert beide Subagenten sequenziell. Der Actor-Subagent liest die bestehende Codebasis, generiert den Endpunkt und gibt eine Compliance- Checkliste zurück. Der Critic-Subagent erhält dann nur die generierte Datei — nicht den Kontext des Actors — und prüft sie unabhängig.

    Beispielausgabe:

    Ich habe den gesamten benötigten Kontext. Jetzt richte ich die Todo-Liste ein und führe den Actor-Critic-Workflow sequenziell aus.
    
    Actor ist fertig. Lass mich überprüfen, ob die Dateien tatsächlich geschrieben wurden, bevor ich den Critic starte:
    Erstellt booking_system_backend/routers/booking_detail.py
    
    Compliance-Checkliste
    [C1] Eingabevalidierung      — PASS — booking_id verwendet Annotated[int, Path(gt=0)]; Header gelesen via Header(alias=…) als opaker String
    [C2] Autorisierung         — PASS — Buchung nur nach ID abgerufen; Eigentum separat verglichen; 404 vs 403 sind unterschiedlich und korrekt
    ...snip...
    
    Die Datei ist korrekt und vollständig. Jetzt starte den Critic-Subagenten:
    
    ---
    
    Starte Critic-Subagenten...
    
    Critic-Subagent abgeschlossen.
    Überprüft booking_system_backend/routers/booking_detail.py
    
    === SECURE PYTHON CRITIC — BEFUNDBERICHT ===
    
    [C1] Eingabevalidierung      — PASS — Alle drei Unterkontrollen erfüllt.
    • `booking_id` ist als `Annotated[int, Path(gt=0)]` deklariert, erzwingt eine
    Positive-Integer-Einschränkung; FastAPI gibt 422 zurück, bevor der Handler
    
    ...snip...
    
    GESAMTURTEIL: PASS
    Würde SAST ohne Sicherheitsbefunde bestehen: JA
    
    BEFUNDE, DIE MASSNAHMEN ERFORDERN:
    • [C6 — WARN — GELÖST] routers/__init__.py existiert und wurde bestätigt
    vorhanden. Keine Maßnahme erforderlich.

    Die architektonische Anmerkung des Critics ist kein Code-Defekt — sie spiegelt den bestehenden Galaxium Travels Workflow wider.

  6. Öffne booking_system_backend/routers/booking_detail.py, um den generierten Code zu überprüfen.

    Das Entwicklungsteam kann nun sicher sein, dass der neue Endpunkt Sicherheitsstandards erfüllt, bevor ein Mensch ihn überprüft und bevor er ein statisches Analysetool erreicht.

Aufräumen

  1. Um die in diesem Tutorial erstellten Dateien zu entfernen, lösche das galaxium-travels- Verzeichnis, das in Richte das Labor ein geklont wurde.
  2. Wenn du die Skills nicht mehr verwenden wirst, klicke auf Bob - Settings >> Bob Settings und dann auf Skills.
  3. Klicke auf den secure-python-actor-Skill.
  4. Klicke auf das Papierkorb-Symbol, um den Skill zu löschen, und klicke dann auf Delete.
  5. Wiederhole diese Schritte, um den secure-python-critic-Skill zu löschen.

Nächste Schritte

In diesem Tutorial hast du IBM Bob verwendet, um:

  • .bob/rules/security.md mit Galaxium Travels Sicherheitsstandards zu konfigurieren, die Bob bei jeder Aufgabe durchsetzt
  • Einen Actor-Skill zu erstellen, der NIST SP 800-53 und OWASP ASVS-Anforderungen als Code-Generierungsanweisungen kodiert
  • Einen Critic-Skill zu erstellen, der jede Kontrolle gängigen SAST-Regeln zuordnet
  • Einen Actor-Critic-Workflow zu orchestrieren, bei dem unabhängige Subagenten Code generieren und überprüfen ohne gemeinsamen Kontext
  • Einen neuen FastAPI-Endpunkt zu erstellen, der Regeln und Skills nutzt, um Sicherheitsbefunde zu reduzieren

Zusätzliche Ressourcen

Wie ist dieses Thema?