Zum Inhalt springen

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.

FeldTypErforderlichStandardBeschreibung
idstringjaEindeutiger Fähigkeits-Identifikator (kleinbuchstaben, alphanumerisch, Bindestriche)
classstringnein"tool"Fähigkeitsklasse: "tool" oder "environment"
imagestringjaDocker-Image, das die Fähigkeit implementiert
tool_sourcestringnein"manifest"Tool-Erkennungsmodus: "manifest" oder "dynamic"
discovery_tool_namestringnein"list_tools"Tool-Name für dynamische Erkennung (wenn tool_source "dynamic" ist)
toolsarraynein[]Liste der Tools, die diese Fähigkeit bereitstellt (erforderlich für "manifest"-Modus)
tools[].namestringjaTool-Name (von Agenten verwendet)
tools[].descriptionstringjaWas das Tool macht (Agenten angezeigt)
tools[].input_schemaobjectjaJSON-Schema für Tool-Parameter
tools[].requires_confirmationbooleanneinfalseLegacy-Feld für Rückwärtskompatibilität
tools[].recommended_policystringneinabgeleitetEmpfohlene Richtlinie: "allow", "ask" oder "block"
tools[].terminal_on_successbooleanneinfalseWenn 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.
networkobjectnein{"mode": "none"}Netzwerkzugriffs-Richtlinie
network.modestringnein"none"Netzwerkmodus: "none", "allowlist" oder "any"
network.hostsarraynein[]Erlaubte Hosts für "allowlist"-Modus (Format: "host:port")
filesystemstringnein"none"Dateisystem-Richtlinie: "none", "temp" oder "workspace"
credentialsarraynein[]Liste der Anmeldedaten, die diese Fähigkeit benötigt
credentials[].namestringjaUmgebungsvariablenname für die Anmeldedaten
credentials[].scopestringjaAnmeldedaten-Bereich: "system" oder "user"
credentials[].credential_typestringnein"secret"Art der Anmeldedaten (derzeit nur "secret")
credentials[].requiredbooleanneintrueOb die Anmeldedaten für die Funktionsfähigkeit der Fähigkeit erforderlich sind
credentials[].descriptionstringnein""Menschenlesbare Beschreibung, wofür diese Anmeldedaten sind
resourcesobjectneinStandardsRessourcenlimits für den Container
resources.max_memory_mbintegernein128Maximaler Speicher in Megabytes
resources.max_cpu_fractionnumbernein0.5Maximale CPU-Kerne (0.5 = halber Kern)
resources.max_cpu_secondsintegernein30Maximale CPU-Zeit pro Tool-Aufruf
resources.pids_limitintegernein64Maximale Anzahl von Prozessen/Threads

Fähigkeiten können Tools auf zwei Arten bereitstellen:

Tools werden direkt im Manifest deklariert (Standardverhalten):

manifest.yaml
id: my-capability
tool_source: manifest # explizit, aber das ist der Standard
tools:
- name: search_web
description: Das Internet nach Informationen durchsuchen
input_schema:
type: object
properties:
query: {type: string}
required: [query]

Tools werden zur Laufzeit durch Aufrufen eines speziellen Erkennungs-Tools entdeckt:

manifest.yaml
id: my-capability
tool_source: dynamic
discovery_tool_name: list_tools # optional, Standard ist "list_tools"
tools: [] # muss für den dynamischen Modus leer sein

Mit 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 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.

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.

Fähigkeiten laufen in isolierten Containern mit konfigurierbarem Netzwerkzugriff:

network:
mode: none

Die Fähigkeit kann keine ausgehenden Netzwerkverbindungen herstellen. Verwenden Sie dies für Tools, die nur lokale Daten verarbeiten oder eingebaute Datensätze verwenden.

network:
mode: allowlist
hosts:
- "api.openweathermap.org:443"
- "*.googleapis.com:443" # Wildcard-Subdomains unterstützt
- "httpbin.org" # beliebiger Port, wenn nicht angegeben

Die 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.

network:
mode: any

Die 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.

manifest.yaml
id: web-search
class: tool
image: 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: 32
manifest.yaml
id: python-env
class: environment
image: 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: 128
manifest.yaml
id: github-integration
class: tool
image: ghcr.io/selu-platform/cap-github:1.5.0
tool_source: dynamic
discovery_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.8

Der Selu-Orchestrator validiert Manifeste beim Laden von Fähigkeiten. Häufige Validierungsfehler:

  • Fehlende erforderliche Felder — Alle Fähigkeiten müssen id und image haben
  • Ungültige Netzwerk-Hosts — Müssen im Format "host:port" oder nur "host" sein
  • Ungültige Tool-Schemasinput_schema muss 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 Modustool_source: dynamic erfordert leeres tools-Array
  • Dateisystem-Beschränkungenfilesystem: workspace nur für class: environment erlaubt

Siehe Container-Richtlinien für die Implementierung des Fähigkeits-Servers oder schauen Sie sich die gRPC-Schnittstelle für die Protokolldetails an.