Skip to content

Schutzmechanismen: Fehlerhaftes Pruning kritischer Inhalte vermeiden ​

Lernziele ​

  • Rundenschutz konfigurieren, damit die KI Zeit hat, auf aktuelle Tool-Ausgaben zu verweisen
  • Die Liste geschützter Tools erweitern, um kritische Operationen vor dem Pruning zu schützen
  • Geschützte Dateimuster einrichten, um bestimmte Dateien vor versehentlichem Pruning zu bewahren
  • Den Sub-Agent-Schutzmechanismus verstehen, um das Zusammenfassungsverhalten nicht zu beeinträchtigen

Das Problem ​

DCP entfernt automatisch redundante Tool-Aufrufe aus dem Gesprächsverlauf – das spart Tokens, kann aber manchmal Probleme verursachen:

  • Die KI hat gerade eine Datei gelesen und möchte den Inhalt analysieren, aber er wurde von DCP entfernt
  • Sie haben mit dem write-Tool eine Konfigurationsdatei geschrieben, die später noch gelesen werden soll, aber nach dem Pruning ist der Dateipfad nicht mehr auffindbar
  • Die KI sagt „basierend auf dem obigen Code", aber der Code ist nicht mehr im Kontext

All diese Situationen zeigen: Bestimmte Inhalte müssen geschützt werden und dürfen nicht entfernt werden.

Anwendungsfälle ​

  • Wenn die KI auf zuvor gelesene Dateiinhalte verweisen muss
  • Wenn kritische Operationen geschützt werden müssen (z.B. Konfigurationen schreiben, Aufgabenplanung)
  • Wenn bestimmte Dateipfade (z.B. Secrets, Schlüssel) besonderen Schutz benötigen
  • Bei der Entwicklung von Sub-Agent-Funktionen (DCP überspringt diese automatisch)

Kernkonzept ​

DCP bietet drei Schutzebenen, die aus verschiedenen Perspektiven verhindern, dass kritische Inhalte versehentlich entfernt werden:

mermaid
graph TD
    A[DCP-Schutzmechanismen] --> B[Rundenschutz]
    A --> C[Geschützte Tools]
    A --> D[Geschützte Dateien]

    B --> B1[Tools innerhalb der Schutzperiode werden nicht entfernt]
    B --> B2[Konfigurierbare Rundenanzahl]

    C --> C1[Standardmäßig geschützte kritische Tools]
    C --> C2[Erweiterbare Tool-Liste]

    D --> D1[Glob-Muster-Matching]
    D --> D2[Schutz nach Dateipfad]

Schutzebenen:

  1. Rundenschutz (zeitliche Dimension): Tools der letzten N Runden werden automatisch geschützt
  2. Tool-Schutz (Tool-Dimension): Bestimmte Tools werden niemals entfernt
  3. Dateischutz (Pfad-Dimension): Tools, die bestimmte Dateien bearbeiten, werden nicht entfernt

Alle drei können kombiniert werden, um ein mehrschichtiges Schutznetz zu bilden.


Rundenschutz ​

Was ist Rundenschutz? ​

Rundenschutz (Turn Protection) ist ein zeitfensterbasierter Schutzmechanismus von DCP. Wenn aktiviert, werden Tool-Aufrufe innerhalb der Schutzperiode nicht zum Pruning-Cache hinzugefügt und können daher von keiner Strategie entfernt werden.

Zweck: Der KI Zeit geben, auf aktuelle Tool-Ausgaben zu verweisen, um die peinliche Situation „gerade gesagt, schon gelöscht" zu vermeiden.

Rundenschutz konfigurieren ​

Fügen Sie in der Konfigurationsdatei hinzu:

jsonc
{
  "turnProtection": {
    "enabled": true,
    "turns": 4
  }
}

Parameterbeschreibung:

  • enabled: Ob Rundenschutz aktiviert ist (Standard: false)
  • turns: Anzahl der geschützten Runden (Standard: 4), d.h. Tools der letzten 4 Runden werden nicht entfernt

Wie Rundenschutz funktioniert ​

DCP berechnet beim Synchronisieren des Tool-Caches (vor jeder KI-Nachricht) die Rundenanzahl für jedes Tool:

typescript
// Wenn aktuelle Runde - Tool-Erstellungsrunde < Schutzrundenanzahl
// wird das Tool nicht entfernt
state.currentTurn - turnCounter < turnProtectionTurns

Beispiel:

  • Aktuelle Runde: 10
  • Tool-Erstellungsrunde: 8
  • Schutzrundenanzahl: 4
  • Ergebnis: 10 - 8 = 2 < 4 → Geschützt, wird nicht entfernt

Auswirkung:

  • Innerhalb der Schutzperiode erscheinen Tools nicht in der <prunable-tools>-Liste
  • Sie werden nicht von automatischen Strategien beeinflusst (Deduplizierung, Überschreiben, Fehlerbereinigung)
  • Die KI kann sie nicht mit den discard/extract-Tools entfernen

Empfohlene Konfiguration ​

SzenarioEmpfohlene RundenanzahlErklärung
Lange Gespräche (10+ Runden)4-6Gibt der KI genug Zeit, auf historische Inhalte zu verweisen
Kurze Gespräche (< 5 Runden)2-3Keine lange Schutzperiode nötig
Stark kontextabhängige Aufgaben6-8Z.B. Code-Refactoring, lange Dokumentanalysen
Standard (nicht kontextabhängig)0-2Nicht aktivieren oder Minimalwert verwenden

Hinweis

Rundenschutz erhöht die Kontextgröße, da mehr Tool-Ausgaben erhalten bleiben. Wenn Sie einen deutlichen Anstieg des Token-Verbrauchs feststellen, können Sie die Schutzrundenanzahl entsprechend reduzieren.


Geschützte Tools ​

Standardmäßig geschützte Tools ​

DCP schützt standardmäßig die folgenden Tools, die niemals entfernt werden:

Tool-NameBeschreibung
taskAufgabenverwaltungs-Tool
todowriteTo-Do-Einträge schreiben
todoreadTo-Do-Einträge lesen
discardDCPs Verwerfen-Tool (die Pruning-Operation selbst)
extractDCPs Extrahieren-Tool (die Pruning-Operation selbst)
batchBatch-Operations-Tool
writeDatei-Schreib-Tool
editDatei-Bearbeitungs-Tool
plan_enterPlanungs-Einstiegsmarkierung
plan_exitPlanungs-Ausstiegsmarkierung

Warum diese Tools geschützt sind:

  • task, todowrite, todoread: Aufgabenverwaltung ist der Kern des Sitzungsstatus; Löschen würde zu Kontextverlust führen
  • discard, extract: Sie sind DCPs eigene Pruning-Tools und können sich nicht selbst entfernen
  • batch, write, edit: Dateioperationen sind der Kern der Interaktion zwischen KI und Benutzercode
  • plan_enter, plan_exit: Planungsmarkierungen helfen, die Sitzungsstruktur zu verstehen

Die Liste geschützter Tools erweitern ​

Wenn Sie weitere Tools schützen müssen, können Sie die Konfiguration erweitern:

jsonc
{
  "tools": {
    "settings": {
      "protectedTools": [
        "task",
        "todowrite",
        "todoread",
        "discard",
        "extract",
        "batch",
        "write",
        "edit",
        "plan_enter",
        "plan_exit",
        // Fügen Sie die Tools hinzu, die Sie schützen möchten
        "read",
        "filesearch"
      ]
    }
  }
}

Globaler Tool-Schutz:

  • Tools in tools.settings.protectedTools sind in allen Strategien geschützt
  • Geeignet für Tools, die von keiner Strategie entfernt werden sollen

Strategieebenen-Tool-Schutz ​

Sie können auch geschützte Tools für bestimmte Strategien festlegen:

jsonc
{
  "strategies": {
    "deduplication": {
      "enabled": true,
      "protectedTools": [
        "read",  // read-Tool bei Deduplizierung schützen
        "filesearch"
      ]
    },
    "purgeErrors": {
      "enabled": true,
      "turns": 4,
      "protectedTools": [
        "write"  // write-Tool bei Fehlerbereinigung schützen
      ]
    }
  }
}

Anwendungsfälle:

  • Ein Tool nur in einer bestimmten Strategie schützen, andere Strategien können es entfernen
  • Beispiel: Deduplizierung darf read entfernen, aber die Fehlerbereinigungsstrategie darf write nicht entfernen

Unterschied zwischen Tool-Schutz und Rundenschutz

  • Tool-Schutz: Unabhängig davon, in welcher Runde das Tool erstellt wurde – solange es in der Schutzliste steht, wird es niemals entfernt
  • Rundenschutz: Alle Tools (außer geschützten Tools) werden innerhalb der Schutzperiode nicht entfernt, können aber nach Ablauf der Schutzperiode entfernt werden

Geschützte Dateimuster ​

Was sind geschützte Dateimuster? ​

Geschützte Dateimuster ermöglichen es Ihnen, durch Glob-Muster Operationen auf bestimmten Dateipfaden vor dem Pruning zu schützen.

Anwendungsfälle:

  • Schlüsseldateien schützen (.env, secrets.json)
  • Konfigurationsdateien schützen (wichtige Konfigurationen dürfen nicht verloren gehen)
  • Projekt-Kerndateien schützen (Einstiegsdateien, Kernbibliotheken)
  • Sensible Verzeichnisse schützen (z.B. src/api/, tests/fixtures/)

Geschützte Dateimuster konfigurieren ​

Fügen Sie in der Konfigurationsdatei hinzu:

jsonc
{
  "protectedFilePatterns": [
    "**/.env*",
    "**/secrets.json",
    "**/config/*.json",
    "src/core/**/*.ts",
    "tests/fixtures/**/*"
  ]
}

Glob-Muster-Erklärung ​

DCP unterstützt Standard-Glob-Muster:

MusterBeschreibungBeispiel-Übereinstimmungen
**Beliebige Verzeichnisebenensrc/, src/components/, a/b/c/
*Beliebige Dateien in einer Verzeichnisebenesrc/*.ts trifft auf src/index.ts
?Ein einzelnes Zeichenfile?.txt trifft auf file1.txt, file2.txt
*.jsonBestimmte Dateierweiterungconfig.json, data.json
**/*.jsonJSON-Dateien in beliebiger Verzeichnisebenea/b/c.json, d.json

Hinweise:

  • * und ? treffen nicht auf / (Verzeichnistrenner)
  • Der Abgleich erfolgt gegen den vollständigen Dateipfad
  • Pfadtrenner sind einheitlich / (auch unter Windows)

Praxisbeispiele ​

Beispiel 1: Umgebungsvariablen-Dateien schützen ​

jsonc
{
  "protectedFilePatterns": [
    "**/.env",
    "**/.env.local",
    "**/.env.production"
  ]
}

Auswirkung: Alle Tools, die .env-Dateien bearbeiten, werden nicht entfernt.

Beispiel 2: Projekt-Kerndateien schützen ​

jsonc
{
  "protectedFilePatterns": [
    "src/index.ts",
    "src/core/**/*.ts",
    "src/api/**/*.ts"
  ]
}

Auswirkung: Tool-Ausgaben, die Kernmodule und APIs bearbeiten, bleiben erhalten, sodass die KI die Projektstruktur immer sehen kann.

Beispiel 3: Test-Fixtures schützen ​

jsonc
{
  "protectedFilePatterns": [
    "tests/fixtures/**/*",
    "tests/mocks/**/*.json"
  ]
}

Auswirkung: Mock-Daten und feste Eingaben für Tests werden nicht entfernt, um inkonsistente Testergebnisse zu vermeiden.


Sub-Agent-Schutz ​

Was ist ein Sub-Agent? ​

Ein Sub-Agent ist ein Mechanismus in OpenCode, bei dem der Haupt-Agent Sub-Agents für bestimmte Aufgaben (wie Dateisuche, Code-Analyse) erzeugen kann. Sub-Agents fassen ihre Ergebnisse zusammen und geben sie an den Haupt-Agent zurück.

DCPs Sub-Agent-Schutz ​

DCP erkennt Sub-Agent-Sitzungen automatisch und überspringt alle Pruning-Operationen.

Implementierungsprinzip:

typescript
// lib/state/utils.ts
export async function isSubAgentSession(client: any, sessionID: string): Promise<boolean> {
    const result = await client.session.get({ path: { id: sessionID } })
    return !!result.data?.parentID  // Wenn parentID vorhanden, ist es ein Sub-Agent
}

Warum Schutz nötig ist:

  • Die Ausgabe des Sub-Agents ist eine Zusammenfassung für den Haupt-Agent
  • Wenn Tool-Ausgaben des Sub-Agents entfernt werden, kann der Haupt-Agent den Kontext möglicherweise nicht verstehen
  • Die Aufgabe des Sub-Agents ist „effiziente Ausführung", nicht „Token sparen"

Benutzerwahrnehmung

Der Sub-Agent-Schutz ist automatisch – Sie müssen nichts konfigurieren. DCP protokolliert erkannte Sub-Agent-Sitzungen in den Logs.


Anleitung: Schutzmechanismen konfigurieren ​

Schritt 1: Konfigurationsdatei bearbeiten ​

Öffnen Sie die globale Konfigurationsdatei (oder Projektkonfigurationsdatei):

bash
# macOS/Linux
code ~/.config/opencode/dcp.jsonc

# Windows
code $env:APPDATA\opencode\dcp.jsonc

Schritt 2: Schutzkonfiguration hinzufügen ​

jsonc
{
  "$schema": "https://raw.githubusercontent.com/Opencode-DCP/opencode-dynamic-context-pruning/main/dcp.schema.json",
  "enabled": true,
  "debug": false,

  // Rundenschutz
  "turnProtection": {
    "enabled": true,
    "turns": 4
  },

  // Geschützte Dateimuster
  "protectedFilePatterns": [
    "**/.env*",
    "**/secrets.json"
  ],

  // Erweiterte geschützte Tools
  "tools": {
    "settings": {
      "nudgeEnabled": true,
      "nudgeFrequency": 10,
      "protectedTools": [
        "task",
        "todowrite",
        "todoread",
        "discard",
        "extract",
        "batch",
        "write",
        "edit",
        "plan_enter",
        "plan_exit",
        "read"
      ]
    },
    "discard": {
      "enabled": true
    },
    "extract": {
      "enabled": true,
      "showDistillation": false
    }
  },

  // Strategieebenen-Schutz
  "strategies": {
    "deduplication": {
      "enabled": true,
      "protectedTools": ["filesearch"]
    },
    "supersedeWrites": {
      "enabled": false
    },
    "purgeErrors": {
      "enabled": true,
      "turns": 4,
      "protectedTools": ["write"]
    }
  }
}

Schritt 3: OpenCode neu starten ​

Nach der Konfigurationsänderung starten Sie OpenCode neu, damit die Konfiguration wirksam wird:

  • macOS/Linux: Rechtsklick auf das OpenCode-Symbol im Dock → Beenden → Erneut öffnen
  • Windows: Rechtsklick auf OpenCode in der Taskleiste → Fenster schließen → Erneut öffnen

Schritt 4: Schutzmechanismen überprüfen ​

Geben Sie im OpenCode-Dialog /dcp context ein, um die aktuelle Kontextanalyse anzuzeigen:

Session Context Breakdown:
──────────────────────────────────────────────────────────

System         15.2% │████████████████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│  25.1K tokens
User            5.1% │████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│   8.4K tokens
Assistant       35.8% │██████████████████████████████████████▒▒▒▒▒▒▒│  59.2K tokens
Tools (45)      43.9% │████████████████████████████████████████████████│  72.6K tokens

──────────────────────────────────────────────────────────

Summary:
  Pruned:          12 tools (~15.2K tokens)
  Current context: ~165.3K tokens
  Without DCP:     ~180.5K tokens

Was Sie sehen sollten:

  • Die Pruned-Anzahl kann sinken (da geschützte Tools nicht entfernt werden)
  • Der Current context kann größer werden (da Rundenschutz mehr Inhalte erhält)

Typische Fallstricke ​

❌ Fehler 1: Übermäßiger Schutz führt zu Token-Verschwendung ​

Problem: Zu lange Schutzrundenanzahl oder zu viele geschützte Tools führen dazu, dass der Kontext immer groß bleibt.

Lösung:

  • Rundenschutz normalerweise auf 2-4 Runden setzen
  • Nur wirklich kritische Tools schützen (z.B. task, write)
  • Regelmäßig /dcp context prüfen, um die Kontextgröße zu überwachen

❌ Fehler 2: Glob-Muster-Matching schlägt fehl ​

Problem: Sie haben *.json gesetzt, aber einige JSON-Dateien werden trotzdem entfernt.

Ursache: * trifft nicht auf /, daher wird a/b/c.json nicht getroffen.

Lösung: Verwenden Sie **/*.json, um JSON-Dateien in beliebiger Verzeichnisebene zu treffen.

❌ Fehler 3: Vergessen, OpenCode neu zu starten ​

Problem: Nach der Konfigurationsänderung werden die Schutzmechanismen nicht wirksam.

Ursache: DCP lädt die Konfigurationsdatei nur beim Start.

Lösung: Nach Konfigurationsänderungen muss OpenCode neu gestartet werden.

❌ Fehler 4: Geschützte Tools erscheinen in der Pruning-Liste ​

Problem: Sie haben geschützte Tools eingerichtet, aber sie erscheinen trotzdem in der <prunable-tools>-Liste.

Ursache: Geschützte Tools werden nicht entfernt, aber wenn sie außerhalb der Schutzperiode liegen, erscheinen sie trotzdem in der <prunable-tools>-Liste (zur Ansicht für die KI), nur dass der Versuch der KI, sie zu entfernen, fehlschlägt.

Lösung: Dies ist normales Verhalten. Wenn die KI versucht, ein geschütztes Tool zu entfernen, lehnt DCP die Operation ab und gibt einen Fehler zurück.


Zusammenfassung ​

Die Schutzmechanismen von DCP umfassen drei Ebenen:

  1. Rundenschutz: Tools innerhalb der Schutzperiode werden nicht entfernt, gibt der KI Zeit, auf historische Inhalte zu verweisen
  2. Geschützte Tools: Bestimmte Tools (z.B. task, write) werden niemals entfernt, benutzerdefinierte Liste erweiterbar
  3. Geschützte Dateimuster: Schutz von Operationen auf bestimmten Dateipfaden durch Glob-Muster
  4. Sub-Agent-Schutz: DCP erkennt automatisch Sub-Agent-Sitzungen und überspringt deren Pruning-Operationen

Empfohlene Konfigurationsstrategie:

  • Entwicklungsphase: Rundenschutz aktivieren (2-4 Runden), Konfigurationsdateien und Kernmodule schützen
  • Produktionsphase: Nach Bedarf anpassen, Balance zwischen Token-Einsparung und Kontextintegrität
  • Kritische Aufgaben: Alle Schutzmechanismen aktivieren, um sicherzustellen, dass kritische Inhalte nicht verloren gehen

Vorschau auf das nächste Kapitel ​

Im nächsten Kapitel lernen wir Zustandspersistenz.

Sie werden lernen:

  • Wie DCP den Pruning-Status und Statistiken über Sitzungen hinweg erhält
  • Speicherort und Format der Persistenzdateien
  • Wie Sie die kumulierten Token-Einsparungen einsehen können
  • Methoden zum Bereinigen der persistierten Daten

Anhang: Quellcode-Referenz ​

Klicken Sie hier, um die Quellcode-Positionen anzuzeigen

Aktualisiert: 2026-01-23

FunktionDateipfadZeilen
Rundenschutz-Logiklib/state/tool-cache.ts39-44
Standard geschützte Toolslib/config.ts68-79
Geschützte Datei-Matchinglib/protected-file-patterns.ts77-82
Sub-Agent-Erkennunglib/state/utils.ts1-8
Deduplizierungsstrategie-Schutzprüfunglib/strategies/deduplication.ts49-57
Discard-Tool-Schutzprüfunglib/strategies/tools.ts89-112

Wichtige Konstanten:

  • DEFAULT_PROTECTED_TOOLS = ["task", "todowrite", "todoread", "discard", "extract", "batch", "write", "edit", "plan_enter", "plan_exit"]: Standard-Liste geschützter Tools

Wichtige Funktionen:

  • isProtectedFilePath(filePath, patterns): Prüft, ob ein Dateipfad einem Schutzmuster entspricht
  • isSubAgentSession(client, sessionID): Erkennt, ob eine Sitzung ein Sub-Agent ist