Die Entwicklung eines nützlichen Agenten geht weit über eine einfache Frage-Antwort-Schnittstelle hinaus. Ein effektiver Agent muss drei Kernanforderungen erfüllen: Kontextverarbeitung (Fortsetzung unterbrochener Sitzungen), Berechtigungskontrolle (Ausführungsumfang festlegen) und Verhaltensüberwachung (Handlungen dokumentieren). Der Open Agent SDK setzt diese Anforderungen durch vier spezialisierte Subsysteme um – SessionStore, PermissionPolicy, SandboxSettings und HookRegistry.
Diese Subsysteme arbeiten zusammen, um eine sichere und leistungsfähige Umgebung für Agenten-Interaktionen zu schaffen. Im Folgenden werden die zentralen Funktionen und Implementierungsdetails dieser Komponenten detailliert erläutert.
SessionPersistence mit SessionStore: Sitzungen sicher speichern und wiederherstellen
Jede Agenten-Interaktion generiert eine Nachrichtensequenz, die ohne Speicherung bei einem Prozessabbruch verloren geht. Der SessionStore adressiert dieses Problem, indem er den Kontext automatisch auf der Festplatte persistiert und bei Bedarf wiederherstellt. Diese Funktion ist entscheidend für kontinuierliche Arbeitsabläufe und Lernprozesse des Agenten.
Grundlegende Funktionsweise und Konfiguration
Der SessionStore operiert als actor-Objekt, wodurch alle Methoden asynchron (await) ausgeführt werden müssen. Standardmäßig speichert das System Sitzungen im Benutzerverzeichnis unter ~/.open-agent-sdk/sessions/, wobei jede Sitzung in einem separaten Unterverzeichnis mit einer transcript.json-Datei abgelegt wird.
let sessionStore = SessionStore() // Standardpfad
let sessionStore = SessionStore(sessionsDir: "/custom/path") // Benutzerdefinierter PfadKernoperationen für das Sitzungsmanagement
Der SessionStore bietet fünf zentrale Methoden, die den gesamten Lebenszyklus einer Sitzung abdecken:
- save: Speichert eine Sitzung, indem die Nachrichten und Metadaten als JSON serialisiert und auf die Festplatte geschrieben werden.
try await sessionStore.save(
sessionId: "my-session",
messages: messages,
metadata: PartialSessionMetadata(
cwd: "/project",
model: "claude-sonnet-4-6",
summary: "Code-Analyse-Sitzung",
tag: "analysis",
firstPrompt: "Projektstruktur analysieren"
)
)Die Speicherung erfolgt mit strengen Berechtigungen (0600 für Dateien, 0700 für Verzeichnisse), sodass nur der aktuelle Benutzer Zugriff hat. Der createdAt-Zeitstempel bleibt unverändert, während updatedAt bei jeder Änderung aktualisiert wird.
- load: Lädt eine Sitzung und deserialisiert die
transcript.jsonin einSessionData-Objekt.
if let data = try await sessionStore.load(sessionId: "my-session") {
print("Nachrichten: \(data.metadata.messageCount)")
print("Modell: \(data.metadata.model)")
}Die Methode unterstützt Paginierung mit limit und offset, um nur relevante Teile der Sitzung zu laden.
- list: Listet alle verfügbaren Sitzungen absteigend nach
updatedAt(neueste zuerst) auf.
- fork: Erstellt eine Kopie einer bestehenden Sitzung, optional mit Trunkierung an einem bestimmten Punkt.
let newId = try await sessionStore.fork(sourceSessionId: "my-session")
let truncatedId = try await sessionStore.fork(
sourceSessionId: "my-session",
upToMessageIndex: 10
)- delete: Entfernt eine gesamte Sitzung inklusive aller zugehörigen Dateien.
Drei Strategien zur Sitzungswiederherstellung
Der Open Agent SDK bietet flexible Mechanismen zur Sitzungswiederherstellung, die je nach Anwendungsfall konfiguriert werden können:
- Explizite Sitzungs-ID: Der Agent lädt die historische Sitzung beim Start basierend auf der angegebenen ID.
let agent = createAgent(options: AgentOptions(
apiKey: apiKey,
model: "claude-sonnet-4-6",
sessionStore: sessionStore,
sessionId: "my-session"
))- Automatische Fortsetzung der letzten Sitzung: Falls keine ID angegeben ist, wird die neueste Sitzung automatisch geladen.
let agent = createAgent(options: AgentOptions(
apiKey: apiKey,
model: "claude-sonnet-4-6",
sessionStore: sessionStore,
continueRecentSession: true
))- Forking und Trunkierung: Ermöglicht das Erstellen eines neuen Sitzungszweigs mit optionaler Historie-Trunkierung.
let agent = createAgent(options: AgentOptions(
apiKey: apiKey,
model: "claude-sonnet-4-6",
sessionStore: sessionStore,
sessionId: "my-session",
forkSession: true,
resumeSessionAt: "msg-uuid-123"
))Sicherheitsmechanismen im SessionStore
Der SessionStore implementiert robuste Sicherheitsvorkehrungen zur Verhinderung von Pfadmanipulationen:
private func validateSessionId(_ sessionId: String) throws {
guard !sessionId.isEmpty else {
throw SDKError.sessionError(message: "Sitzungs-ID darf nicht leer sein")
}
let forbidden = ["/", "\\", ".."]
for component in forbidden {
if sessionId.contains(component) {
throw SDKError.sessionError(message: "Ungültiges Zeichen in Sitzungs-ID: '\(component)'")
}
}
}Diese Validierung verhindert Angriffe durch manipulierte Sitzungs-IDs, die auf unerwartete Verzeichnisse zugreifen könnten.
Berechtigungskontrolle mit PermissionPolicy: Wer darf was tun?
Neben der Sitzungspersistenz ist die Steuerung von Berechtigungen ein zentraler Aspekt sicherer Agenten-Interaktionen. Das PermissionPolicy-System definiert sechs unterschiedliche Berechtigungsmodi, die präzise regeln, welche Operationen ein Agent ausführen darf.
Übersicht der Berechtigungsmodi
| Modus | Verhalten | |-------|-----------| | default | Benutzer wird vor jeder Tool-Ausführung um Bestätigung gefragt | | plan | Lesende Tools werden direkt ausgeführt; schreibende Operationen benötigen Bestätigung | | auto | Alle Tools werden automatisch ausgeführt, außer potenziell gefährlichen Operationen | | acceptEdits | Akzeptiert Bearbeitungen automatisch, fragt aber bei neuen Dateien nach | | restricted | Nur vorab definierte Tools sind erlaubt | | custom | Benutzerdefinierte Regeln können implementiert werden |
Die Auswahl des passenden Modus hängt vom Anwendungsfall ab – von hochsensiblen Umgebungen bis hin zu automatisierten Workflows.
Ausblick: SandboxSettings und HookRegistry als nächste Bausteine
Während SessionStore und PermissionPolicy bereits grundlegende Sicherheits- und Persistenzfunktionen bieten, ergänzen die Subsysteme SandboxSettings und HookRegistry das Ökosystem um zusätzliche Sicherheitsebenen. SandboxSettings ermöglicht die Isolation von Agenten-Prozessen in kontrollierten Umgebungen, während HookRegistry flexible Erweiterungsmöglichkeiten für zusätzliche Sicherheitsprüfungen oder Protokollierungsfunktionen bietet.
Die Kombination dieser vier Subsysteme schafft eine robuste Grundlage für die Entwicklung sicherer und zuverlässiger Agenten, die sowohl Benutzerfreundlichkeit als auch Sicherheitsanforderungen erfüllen.
KI-Zusammenfassung
Açık Ajan SDK, modern AI ajanları için güvenli ve yetkilendirilmiş oturumlar oluşturmanıza olanak tanır. SessionStore ve PermissionPolicy sistemlerini derinlemesine inceleyin.