manifest.yaml Schema
Eine manifest.yaml-Datei definiert die Schnittstelle einer Fähigkeit, Ressourcenanforderungen und Anmeldedaten-Bedürfnisse. Sie teilt Selu mit, wie die Fähigkeit ausgeführt werden soll und welche Geheimnisse sie benötigt.
| Feld | Typ | Erforderlich | Standard | Beschreibung |
|---|---|---|---|---|
id | string | ja | Eindeutiger Fähigkeits-Identifikator (kleinbuchstaben, alphanumerisch, Bindestriche) | |
class | string | nein | "tool" | Fähigkeitsklasse: "tool" oder "environment" |
image | string | ja | Docker-Image, das die Fähigkeit implementiert | |
tool_source | string | nein | "manifest" | Tool-Erkennungsmodus: "manifest" oder "dynamic" |
discovery_tool_name | string | nein | "list_tools" | Tool-Name für dynamische Erkennung (wenn tool_source "dynamic" ist) |
tools | array | nein | [] | Liste der Tools, die diese Fähigkeit bereitstellt (erforderlich für "manifest"-Modus) |
tools[].name | string | ja | Tool-Name (von Agenten verwendet) | |
tools[].description | string | ja | Was das Tool macht (Agenten angezeigt) | |
tools[].input_schema | object | ja | JSON-Schema für Tool-Parameter | |
tools[].requires_confirmation | boolean | nein | false | Legacy-Feld für Rückwärtskompatibilität |
tools[].recommended_policy | string | nein | abgeleitet | Empfohlene Richtlinie: "allow", "ask" oder "block" |
tools[].terminal_on_success | boolean | nein | false | Wenn true, beendet die Tool-Schleife sofort nach einem erfolgreichen Aufruf, anstatt dem LLM eine weitere Iteration zu geben. Nützlich für „Produzieren-und-Fertig”-Tools wie PDF-Erstellung, bei denen ein Folgeaufruf ein doppeltes Artefakt erzeugen würde. |
network | object | nein | {"mode": "none"} | Netzwerkzugriffs-Richtlinie |
network.mode | string | nein | "none" | Netzwerkmodus: "none", "allowlist" oder "any" |
network.hosts | array | nein | [] | Erlaubte Hosts für "allowlist"-Modus (Format: "host:port") |
filesystem | string | nein | "none" | Dateisystem-Richtlinie: "none", "temp" oder "workspace" |
credentials | array | nein | [] | Liste der Anmeldedaten, die diese Fähigkeit benötigt |
credentials[].name | string | ja | Umgebungsvariablenname für die Anmeldedaten | |
credentials[].scope | string | ja | Anmeldedaten-Bereich: "system" oder "user" | |
credentials[].credential_type | string | nein | "secret" | Art der Anmeldedaten (derzeit nur "secret") |
credentials[].required | boolean | nein | true | Ob die Anmeldedaten für die Funktionsfähigkeit der Fähigkeit erforderlich sind |
credentials[].description | string | nein | "" | Menschenlesbare Beschreibung, wofür diese Anmeldedaten sind |
resources | object | nein | Standards | Ressourcenlimits für den Container |
resources.max_memory_mb | integer | nein | 128 | Maximaler Speicher in Megabytes |
resources.max_cpu_fraction | number | nein | 0.5 | Maximale CPU-Kerne (0.5 = halber Kern) |
resources.max_cpu_seconds | integer | nein | 30 | Maximale CPU-Zeit pro Tool-Aufruf |
resources.pids_limit | integer | nein | 64 | Maximale Anzahl von Prozessen/Threads |
Tool-Erkennungsmodi
Abschnitt betitelt „Tool-Erkennungsmodi“Fähigkeiten können Tools auf zwei Arten bereitstellen:
Statische Tools (tool_source: manifest)
Abschnitt betitelt „Statische Tools (tool_source: manifest)“Tools werden direkt im Manifest deklariert (Standardverhalten):
id: my-capabilitytool_source: manifest # explizit, aber das ist der Standardtools: - name: search_web description: Das Internet nach Informationen durchsuchen input_schema: type: object properties: query: {type: string} required: [query]Dynamische Tools (tool_source: dynamic)
Abschnitt betitelt „Dynamische Tools (tool_source: dynamic)“Tools werden zur Laufzeit durch Aufrufen eines speziellen Erkennungs-Tools entdeckt:
id: my-capabilitytool_source: dynamicdiscovery_tool_name: list_tools # optional, Standard ist "list_tools"tools: [] # muss für den dynamischen Modus leer seinMit dynamischer Erkennung muss der Fähigkeits-Container ein Erkennungs-Tool implementieren (Standardname: list_tools), das die verfügbaren Tools im JSON-Format zurückgibt. Dies ermöglicht Fähigkeiten, die Tools basierend auf Laufzeitbedingungen, API-Introspektion oder Benutzerkonfiguration generieren.
Anmeldedaten-Bereiche
Abschnitt betitelt „Anmeldedaten-Bereiche“Anmeldedaten können verschiedene Bereiche haben:
system— Geteilt zwischen allen Benutzern. Einmal von einem Administrator gesetzt und von allen verwendet.user— Persönlich für jeden Benutzer. Jede Person stellt ihre eigenen API-Schlüssel bereit.
Wählen Sie system für organisatorische API-Schlüssel, die geteilt werden sollen, und user für persönliche Konten oder wenn Benutzer lieber ihre eigenen Anmeldedaten verwalten möchten.
Tool-Richtlinien
Abschnitt betitelt „Tool-Richtlinien“Jedes Tool kann eine recommended_policy deklarieren, die als Standard dient, wenn Benutzer den Agenten installieren:
"allow"— Tool läuft automatisch ohne zu fragen"ask"— Benutzer wird vor jeder Tool-Ausführung gefragt"block"— Tool ist standardmäßig blockiert (Benutzer müssen explizit aktivieren)
Wenn Sie keine recommended_policy angeben, wird sie vom Legacy-requires_confirmation-Feld abgeleitet oder standardmäßig auf "block" aus Sicherheitsgründen gesetzt.
Netzwerkzugriff
Abschnitt betitelt „Netzwerkzugriff“Fähigkeiten laufen in isolierten Containern mit konfigurierbarem Netzwerkzugriff:
Kein Netzwerkzugriff (mode: none)
Abschnitt betitelt „Kein Netzwerkzugriff (mode: none)“network: mode: noneDie Fähigkeit kann keine ausgehenden Netzwerkverbindungen herstellen. Verwenden Sie dies für Tools, die nur lokale Daten verarbeiten oder eingebaute Datensätze verwenden.
Allowlist-Modus (mode: allowlist)
Abschnitt betitelt „Allowlist-Modus (mode: allowlist)“network: mode: allowlist hosts: - "api.openweathermap.org:443" - "*.googleapis.com:443" # Wildcard-Subdomains unterstützt - "httpbin.org" # beliebiger Port, wenn nicht angegebenDie Fähigkeit kann nur zu explizit aufgelisteten Hosts verbinden. Wildcard-Einträge, die mit *. beginnen, matchen jede Subdomain. Dies ist der empfohlene Modus für die meisten Fähigkeiten.
Beliebiger Netzwerkzugriff (mode: any)
Abschnitt betitelt „Beliebiger Netzwerkzugriff (mode: any)“network: mode: anyDie Fähigkeit kann zu jedem Host im Internet verbinden. Verwenden Sie sparsam und nur für vertrauenswürdige Fähigkeiten, die uneingeschränkten Zugriff benötigen.
Beispiele
Abschnitt betitelt „Beispiele“Grundlegende Tool-Fähigkeit
Abschnitt betitelt „Grundlegende Tool-Fähigkeit“id: web-searchclass: toolimage: ghcr.io/selu-platform/cap-web-search:2.1.0
tools: - name: search_web description: Das Web durchsuchen und relevante Ergebnisse zurückgeben input_schema: type: object properties: query: type: string description: Die Suchanfrage max_results: type: integer description: Maximale Anzahl zurückzugebender Ergebnisse default: 5 required: [query] recommended_policy: allow
network: mode: allowlist hosts: - "duckduckgo.com:443" - "api.openai.com:443"
credentials: - name: SEARCH_API_KEY scope: system required: false description: > Optionaler API-Schlüssel für verbesserte Suchergebnisse. Holen Sie sich einen von https://serpapi.com, wenn Sie zuverlässigere Suchdaten möchten.
resources: max_memory_mb: 256 max_cpu_fraction: 0.5 pids_limit: 32Umgebungs-Fähigkeit mit Arbeitsbereich
Abschnitt betitelt „Umgebungs-Fähigkeit mit Arbeitsbereich“id: python-envclass: environmentimage: ghcr.io/selu-platform/cap-python-env:1.0.0
tools: - name: execute_python description: Python-Code in einer isolierten Umgebung ausführen input_schema: type: object properties: code: type: string description: Auszuführender Python-Code required: [code] recommended_policy: ask
filesystem: workspace
credentials: - name: OPENAI_API_KEY scope: user required: true description: > Ihr OpenAI API-Schlüssel. Holen Sie sich einen von https://platform.openai.com/api-keys. Dies ist für KI-gestützte Code-Analyse erforderlich.
resources: max_memory_mb: 512 max_cpu_fraction: 1.0 max_cpu_seconds: 60 pids_limit: 128Dynamische Tool-Fähigkeit
Abschnitt betitelt „Dynamische Tool-Fähigkeit“id: github-integrationclass: toolimage: ghcr.io/selu-platform/cap-github:1.5.0tool_source: dynamicdiscovery_tool_name: discover_repositories
tools: [] # leer - zur Laufzeit durch Erkennung gefüllt
network: mode: allowlist hosts: - "api.github.com:443" - "github.com:443"
credentials: - name: GITHUB_TOKEN scope: user required: true description: > GitHub Personal Access Token. Erstellen Sie einen unter: https://github.com/settings/personal-access-tokens
Erforderliche Bereiche: 'repo' für private Repositories, 'public_repo' nur für öffentliche Repositories.
resources: max_memory_mb: 256 max_cpu_fraction: 0.8Validierung
Abschnitt betitelt „Validierung“Der Selu-Orchestrator validiert Manifeste beim Laden von Fähigkeiten. Häufige Validierungsfehler:
- Fehlende erforderliche Felder — Alle Fähigkeiten müssen
idundimagehaben - Ungültige Netzwerk-Hosts — Müssen im Format
"host:port"oder nur"host"sein - Ungültige Tool-Schemas —
input_schemamuss gültiges JSON-Schema sein - Ungültige Anmeldedaten-Bereiche — Müssen
"system"oder"user"sein - Ungültige Richtlinienwerte — Müssen
"allow","ask"oder"block"sein - Konflikte im dynamischen Modus —
tool_source: dynamicerfordert leerestools-Array - Dateisystem-Beschränkungen —
filesystem: workspacenur fürclass: environmenterlaubt
Nächste Schritte
Abschnitt betitelt „Nächste Schritte“Siehe Container-Richtlinien für die Implementierung des Fähigkeits-Servers oder schauen Sie sich die gRPC-Schnittstelle für die Protokolldetails an.