API-Referenz¶
Dieses Dokument bietet umfassende Dokumentation fuer die Symbiont Runtime-APIs. Das Symbiont-Projekt stellt zwei unterschiedliche API-Systeme bereit, die fuer verschiedene Anwendungsfaelle und Entwicklungsstadien konzipiert sind.
Ueberblick¶
Symbiont bietet zwei API-Schnittstellen:
- Runtime HTTP API - Eine vollstaendige API fuer direkte Runtime-Interaktion, Agent-Management und Workflow-Ausfuehrung
- Tool Review API (Produktion) - Eine umfassende, produktionsbereite API fuer KI-gesteuerte Tool-Review- und Signaturworkflows
Runtime HTTP API¶
Die Runtime HTTP API bietet direkten Zugang zur Symbiont Runtime fuer Workflow-Ausfuehrung, Agent-Management und Systemueberwachung. Alle Endpunkte sind vollstaendig implementiert und produktionsbereit, wenn das http-api Feature aktiviert ist.
Basis-URL¶
Authentifizierung¶
Runtime-Routen ausser Gesundheitspruefungen erfordern Bearer-Authentifizierung. Konfigurieren Sie eine private API-Schluesseldatei oder das bisherige Betreiber-Token SYMBIONT_API_TOKEN.
Geschuetzte Endpunkte:
- Alle Endpunkte unter /api/v1/agents/* erfordern Authentifizierung
- Nur Gesundheitspruefungen sind oeffentlich. Workflow-Einreichungen und Metriken erfordern Administratorrechte.
Verfuegbare Endpunkte¶
Gesundheitspruefung¶
Gibt den aktuellen Systemgesundheitsstatus und grundlegende Runtime-Informationen zurueck.
Response (200 OK):
{
"status": "healthy",
"uptime_seconds": 3600,
"timestamp": "2024-01-15T10:30:00Z",
"version": "1.0.0"
}
Response (500 Interner Serverfehler):
{
"status": "unhealthy",
"error": "Database connection failed",
"timestamp": "2024-01-15T10:30:00Z"
}
Verfuegbare Endpunkte¶
Workflow-Ausfuehrung¶
Administratoren uebermitteln rohen DSL-Quelltext in workflow_id; parameters wird als Eingabe des Aufrufs verwendet. Lassen Sie agent_id weg, um eine Registrierung zu vergeben, oder geben Sie eine ID an, um sie zu erstellen oder zu ersetzen. Auf Agenten beschraenkte Schluessel erhalten hier 403 ADMIN_REQUIRED und koennen ihren registrierten Quelltext ueber /agents/{id}/execute aufrufen. Eine queued-Antwort bestaetigt die Aufnahme; ordnen Sie execution_id in /agents/{id}/history zu, um das endgueltige Ergebnis zu erhalten. Siehe den Workflow-Vertrag fuer Details zu Quellenauswahl, Validierung und Migration.
Ohne Sandbox-Angabe bleibt Docker/Tier1 der Registrierungsstandard. Mit
with sandbox = "landlock" wird das native beaufsichtigte Backend explizit
ausgewaehlt; Landlock erfuellt keine Container- oder VM-Stufenanforderung.
Request Body:
{
"workflow_id": "agent report() { with sandbox = \"docker\" {} }",
"parameters": {},
"agent_id": null
}
Response (200 OK):
{
"status": "queued",
"workflow_id": "agent report() { with sandbox = \"docker\" {} }",
"agent_id": "19b183f7-97c4-4e42-9c62-5e9c940bfae3",
"execution_id": "c7022f13-7140-4a09-8e30-b1941e0cbb32",
"metadata": {}
}
Agent-Management¶
Alle Agent-Management-Endpunkte erfordern Authentifizierung ueber den Authorization: Bearer <token> Header.
Agenten auflisten¶
Ruft eine Liste aller aktiven Agenten in der Runtime ab.
Response (200 OK):
Agent-Status abrufen¶
Ruft den Scheduler-Status fuer einen bestimmten Agenten ab. CPU und Speicher sind
nullable; der aktuelle Scheduler besitzt keinen Sampler pro Agent und liefert
null fuer interne und externe Agenten. Clients duerfen diese Werte nicht als
Nullauslastung darstellen.
Response (200 OK):
{
"agent_id": "uuid",
"state": "Running",
"last_activity": "2024-01-15T10:30:00Z",
"resource_usage": {
"memory_bytes": null,
"cpu_percent": null,
"active_tasks": 1
},
"execution_mode": "Ephemeral"
}
active_tasks zaehlt die vom Scheduler verwalteten Aufgaben. last_activity ist
kein Zeitstempel einer Ressourcenmessung. Die Fleet Overview zeigt Nicht erfasst
fuer fehlende CPU- und Speicherwerte an; Worker-Kapazitaet
liefert separat erfasste Worker-Auslastung und reservierte Kapazitaet. Diese
Worker-Werte sind keine Summen pro Agent.
Neue Agent-Zustaende:
- running: Agent fuehrt aktiv mit einem laufenden Prozess aus
- ready: Agent ist initialisiert und bereit zur Ausfuehrung
- waiting: Agent wartet in der Warteschlange auf Ausfuehrung
- failed: Agent-Ausfuehrung fehlgeschlagen oder Gesundheitspruefung fehlgeschlagen
- completed: Agent-Aufgabe erfolgreich abgeschlossen
- terminated: Agent wurde ordnungsgemaess oder erzwungen beendet
Agent erstellen¶
Erstellt einen neuen Agenten mit der angegebenen Konfiguration.
Request Body:
Response (200 OK):
Agent aktualisieren¶
Aktualisiert die Konfiguration eines bestehenden Agenten. Mindestens ein Feld muss angegeben werden.
Request Body:
Response (200 OK):
Agent loeschen¶
Loescht einen bestehenden Agenten aus der Runtime.
Response (200 OK):
Agent ausfuehren¶
POST /api/v1/agents/{id}/execute
Idempotency-Key: <UUID retained for retries>
Authorization: Bearer <your-token>
Reicht einen einzelnen Aufruf des ausgewaehlten Agenten ein. Verwenden Sie dieselbe UUID und denselben Request erneut, um ein gespeichertes Ergebnis oder ein explizites Resultat vom Typ active/unresolved/reconciled/conflict abzurufen. Siehe Scheduler-Wiederholungszustaende.
Request Body:
Response (200 OK):
Agenten-Ausfuehrungshistorie abrufen¶
Ruft die Ausfuehrungshistorie fuer einen bestimmten Agenten ab.
Response (200 OK):
{
"history": [
{
"execution_id": "uuid",
"status": "completed",
"timestamp": "2024-01-15T10:30:00Z"
}
]
}
Agent-Heartbeat¶
Sendet einen Heartbeat von einem laufenden Agenten, um seinen Gesundheitsstatus zu aktualisieren.
Event an Agent senden¶
Sendet ein externes Event an einen laufenden Agenten fuer ereignisgesteuerte Ausfuehrung.
System-Metriken¶
Ruft einen umfassenden Metriken-Snapshot ab, der Scheduler, Task-Manager, Load Balancer und Systemressourcen abdeckt.
Response (200 OK):
{
"timestamp": "2026-02-16T12:00:00Z",
"scheduler": {
"total_jobs": 12,
"active_jobs": 8,
"paused_jobs": 2,
"failed_jobs": 1,
"total_runs": 450,
"successful_runs": 445,
"dead_letter_count": 2
},
"task_manager": {
"queued_tasks": 3,
"running_tasks": 5,
"completed_tasks": 1200,
"failed_tasks": 15
},
"load_balancer": {
"total_workers": 4,
"active_workers": 3,
"requests_per_second": 12.5
},
"system": {
"cpu_usage_percent": 45.2,
"memory_usage_bytes": 536870912,
"memory_total_bytes": 17179869184,
"uptime_seconds": 3600
}
}
Der Metriken-Snapshot kann auch in Dateien (atomischer JSON-Schreibvorgang) oder OTLP-Endpunkte exportiert werden, indem das MetricsExporter-System der Runtime verwendet wird. Siehe den Abschnitt Metriken und Telemetrie weiter unten.
Metriken und Telemetrie¶
Symbiont unterstuetzt den Export von Laufzeitmetriken an mehrere Backends:
Datei-Exporter¶
Schreibt Metriken-Snapshots als atomische JSON-Dateien (tempfile + rename):
use symbi_runtime::metrics::{FileMetricsExporter, MetricsExporterConfig};
let exporter = FileMetricsExporter::new("/var/lib/symbi/metrics.json");
exporter.export(&snapshot)?;
OTLP-Exporter¶
Sendet Metriken an jeden OpenTelemetry-kompatiblen Endpunkt (erfordert das metrics Feature):
use symbi_runtime::metrics::{OtlpExporter, OtlpExporterConfig, OtlpProtocol};
let config = OtlpExporterConfig {
endpoint: "http://localhost:4317".to_string(),
protocol: OtlpProtocol::Grpc,
..Default::default()
};
Composite-Exporter¶
Fan-Out an mehrere Backends gleichzeitig -- einzelne Export-Fehler werden protokolliert, blockieren aber andere Exporter nicht:
use symbi_runtime::metrics::CompositeExporter;
let composite = CompositeExporter::new(vec![
Box::new(file_exporter),
Box::new(otlp_exporter),
]);
Hintergrund-Sammlung¶
Der MetricsCollector laeuft als Hintergrund-Thread und sammelt periodisch Snapshots und exportiert sie:
use symbi_runtime::metrics::MetricsCollector;
let collector = MetricsCollector::new(exporter, interval);
collector.start();
// ... spaeter ...
collector.stop();
Skill-Scanning (ClawHavoc)¶
Der SkillScanner untersucht Agent-Skill-Inhalte auf boeswillige Muster, bevor sie geladen werden. Er wird mit 40 integrierten ClawHavoc-Verteidigungsregeln in 10 Angriffskategorien ausgeliefert:
| Kategorie | Anzahl | Schweregrad | Beispiele |
|---|---|---|---|
| Urspruengliche Verteidigungsregeln | 10 | Critical/Warning | pipe-to-shell, eval-with-fetch, rm-rf-pattern |
| Reverse Shells | 7 | Critical | bash, nc, ncat, mkfifo, python, perl, ruby |
| Credential Harvesting | 6 | High | SSH-Schluessel, AWS-Zugangsdaten, Cloud-Konfiguration, Browser-Cookies, Keychain |
| Netzwerk-Exfiltration | 3 | High | DNS-Tunnel, /dev/tcp, netcat outbound |
| Prozessinjektion | 4 | Critical | ptrace, LD_PRELOAD, /proc/mem, gdb attach |
| Privilegien-Eskalation | 5 | High | sudo, setuid, setcap, chown root, nsenter |
| Symlink- / Pfadtraversal | 2 | Medium | Symlink-Escape, tiefe Pfadtraversal |
| Downloader-Ketten | 3 | Medium | curl save, wget save, chmod exec |
Siehe das Sicherheitsmodell fuer die vollstaendige Regelliste und das Schweregrad-Modell.
Verwendung¶
use symbi_runtime::skills::SkillScanner;
let scanner = SkillScanner::new(); // enthaelt alle 40 Standardregeln
let result = scanner.scan_skill("/path/to/skill/");
if !result.passed {
for finding in &result.findings {
eprintln!("[{}] {}: {} (line {})",
finding.severity, finding.rule, finding.message, finding.line);
}
}
Benutzerdefinierte Deny-Muster koennen neben den Standards hinzugefuegt werden:
let scanner = SkillScanner::with_custom_rules(vec![
("custom-pattern".into(), r"my_dangerous_pattern".into(),
ScanSeverity::Warning, "Custom rule description".into()),
]);
Server-Konfiguration¶
Der Runtime HTTP API-Server kann mit den folgenden Optionen konfiguriert werden:
- Standard-Bind-Adresse:
127.0.0.1:8080 - CORS-Unterstuetzung: Konfigurierbar fuer Entwicklung
- Request-Tracing: Aktiviert ueber Tower-Middleware
- Feature Gate: Verfuegbar hinter dem
http-apiCargo-Feature
Feature-Konfigurationsreferenz¶
Cloud-LLM-Inferenz (cloud-llm)¶
Verbindung zu Cloud-LLM-Anbietern ueber OpenRouter fuer Agent-Reasoning:
Umgebungsvariablen:
- OPENROUTER_API_KEY -- Ihr OpenRouter-API-Schluessel (erforderlich)
- OPENROUTER_MODEL -- Zu verwendendes Modell (Standard: google/gemini-2.0-flash-001)
- OPENROUTER_REFERER -- Optional. Setzt den HTTP-Referer-Header bei OpenRouter-Anfragen (App-Zuordnung). Nicht setzen fuer nicht zugeordneten Traffic.
- OPENROUTER_TITLE -- Optional. Setzt den X-Title-Header. Siehe OpenRouter app attribution.
Der Cloud-LLM-Anbieter integriert sich in die execute_actions()-Pipeline der Reasoning-Schleife. Er unterstuetzt Streaming-Antworten, automatische Wiederholungsversuche mit exponentiellem Backoff und Token-Nutzungsverfolgung.
Standalone Agent-Modus (standalone-agent)¶
Meta-Feature, das Cloud-LLM-Inferenz fuer Cloud-native Agenten aktiviert:
Umgebungsvariablen:
- OPENROUTER_API_KEY -- OpenRouter API-Schluessel
Note: Composio MCP and SymbiBot integration were removed in this version due to security concerns — see SECURITY_AUDIT.md C3 for context.
Cedar Policy Engine (cedar)¶
Formale Autorisierung mit der Cedar-Richtliniensprache:
Cedar-Richtlinien integrieren sich in die Gate-Phase der Reasoning-Schleife und bieten feingranulare Autorisierungsentscheidungen. Siehe das Sicherheitsmodell fuer Richtlinienbeispiele.
Vektordatenbank-Konfiguration¶
Symbiont wird mit LanceDB als Standard-eingebettetem Vektor-Backend ausgeliefert -- kein externer Dienst erforderlich. Fuer skalierte Deployments ist Qdrant als optionales Backend verfuegbar.
LanceDB (Standard):
Keine zusaetzliche Konfiguration erforderlich. Daten werden lokal neben der Runtime gespeichert.
Qdrant (optional):
[vector_db]
enabled = true
backend = "qdrant"
collection_name = "symbi_knowledge"
url = "http://localhost:6333"
Umgebungsvariablen:
- SYMBIONT_VECTOR_BACKEND -- lancedb (Standard) oder qdrant
- QDRANT_URL -- Qdrant-Server-URL (nur bei Verwendung von Qdrant)
Erweiterte Reasoning-Primitiven (orga-adaptive)¶
Tool-Kuratierung, Stuck-Loop-Erkennung, Kontext-Pre-Fetch und verzeichnisspezifische Konventionen aktivieren:
Siehe den orga-adaptive-Leitfaden fuer die vollstaendige Konfigurationsreferenz.
Datenstrukturen¶
Kern-Typen¶
// Workflow-Ausfuehrungsanfrage
WorkflowExecutionRequest {
workflow_id: String,
parameters: serde_json::Value,
agent_id: Option<AgentId>
}
// Agent-Status-Response
AgentStatusResponse {
agent_id: AgentId,
state: AgentState,
last_activity: DateTime<Utc>,
resource_usage: ResourceUsage
}
// Gesundheitspruefungs-Response
HealthResponse {
status: String,
uptime_seconds: u64,
timestamp: DateTime<Utc>,
version: String
}
// Agent-Erstellungsanfrage
CreateAgentRequest {
name: String,
dsl: String
}
// Agent-Erstellungsantwort
CreateAgentResponse {
id: String,
status: String
}
// Agent-Aktualisierungsanfrage
UpdateAgentRequest {
name: Option<String>,
dsl: Option<String>
}
// Agent-Aktualisierungsantwort
UpdateAgentResponse {
id: String,
status: String
}
// Agent-Loeschantwort
DeleteAgentResponse {
id: String,
status: String
}
// Agent-Ausfuehrungsanfrage
ExecuteAgentRequest {
// Leere Struktur vorerst
}
// Agent-Ausfuehrungsantwort
ExecuteAgentResponse {
execution_id: String,
status: String
}
// Agent-Ausfuehrungseintrag
AgentExecutionRecord {
execution_id: String,
status: String,
timestamp: String
}
// Agenten-Ausfuehrungshistorie-Response
GetAgentHistoryResponse {
history: Vec<AgentExecutionRecord>
}
Runtime Provider Interface¶
Die API implementiert ein RuntimeApiProvider Trait mit den folgenden erweiterten Methoden:
execute_workflow()- Fuehrt einen Workflow mit gegebenen Parametern ausget_agent_status()- Ruft detaillierten Status mit Echtzeit-Ausfuehrungsmetriken abget_system_health()- Ruft den allgemeinen Systemgesundheitsstatus mit Scheduler-Statistiken ablist_agents()- Listet alle Agenten auf (laufend, wartend und abgeschlossen)shutdown_agent()- Ordnungsgemaesses Herunterfahren mit Ressourcenbereinigung und Timeout-Behandlungget_metrics()- Ruft umfassende Systemmetriken einschliesslich Aufgabenstatistiken abcreate_agent()- Erstellt Agenten mit Ausfuehrungsmodus-Spezifikationupdate_agent()- Aktualisiert Agent-Konfiguration mit Persistenzdelete_agent()- Loescht Agenten mit ordnungsgemaesser Bereinigung laufender Prozesseexecute_agent()- Startet Ausfuehrung mit Ueberwachung und Gesundheitspruefungenget_agent_history()- Ruft detaillierte Ausfuehrungshistorie mit Leistungsmetriken ab
Scheduling-API¶
Alle Scheduling-Endpunkte erfordern Authentifizierung. Erfordert das cron Feature.
Zeitplaene auflisten¶
Response (200 OK):
[
{
"job_id": "uuid",
"name": "daily-report",
"cron_expression": "0 0 9 * * *",
"timezone": "America/New_York",
"status": "active",
"enabled": true,
"next_run": "2026-03-04T09:00:00Z",
"run_count": 42
}
]
Zeitplan erstellen¶
Request Body:
{
"name": "daily-report",
"cron_expression": "0 0 9 * * *",
"timezone": "America/New_York",
"agent_name": "report-agent",
"policy_ids": ["policy-1"],
"one_shot": false
}
Der cron_expression verwendet sechs Felder: sec min hour day month weekday (optionales siebtes Feld fuer Jahr).
Response (200 OK):
Zeitplan aktualisieren¶
Request Body (alle Felder optional):
{
"cron_expression": "0 */10 * * * *",
"timezone": "UTC",
"policy_ids": ["policy-2"],
"one_shot": true
}
Zeitplan pausieren / fortsetzen / ausloesen¶
POST /api/v1/schedules/{id}/pause
POST /api/v1/schedules/{id}/resume
POST /api/v1/schedules/{id}/trigger
Authorization: Bearer <your-token>
Idempotency-Key: <invocation-uuid>
Manuelle Ausfuehrungen erfordern ein administratives Token und eine UUID im Header Idempotency-Key. Sie liefern queued, ein gespeichertes Ergebnis oder einen expliziten Zustand in_progress / unresolved / reconciled / conflict. Verwenden Sie bei Wiederholungen dieselbe UUID. Pausieren und Fortsetzen behalten die folgende Antwort; ungeklaerte Ausfuehrungen verhindern das Fortsetzen. Siehe Cron-Wiederherstellung.
Response (200 OK):
Zeitplan loeschen¶
Response (200 OK):
Zeitplan-Historie abrufen¶
Response (200 OK):
{
"job_id": "uuid",
"history": [
{
"run_id": "uuid",
"started_at": "2026-03-03T09:00:00Z",
"completed_at": "2026-03-03T09:01:23Z",
"status": "completed",
"error": null,
"execution_time_ms": 83000
}
]
}
Naechste Laeufe abrufen¶
Response (200 OK):
Scheduler-Gesundheit¶
Gibt Scheduler-spezifische Gesundheits- und Statistikdaten zurueck.
Channel-Adapter-API¶
Alle Channel-Endpunkte erfordern Authentifizierung. Verbindet Agenten mit Slack, Microsoft Teams und Mattermost.
Channels auflisten¶
Response (200 OK):
Channel registrieren¶
Request Body:
{
"name": "slack-general",
"platform": "slack",
"config": {
"webhook_url": "https://hooks.slack.com/...",
"channel": "#general"
}
}
Unterstuetzte Plattformen: slack, teams, mattermost.
Response (200 OK):
Channel abrufen / aktualisieren / loeschen¶
GET /api/v1/channels/{id}
PUT /api/v1/channels/{id}
DELETE /api/v1/channels/{id}
Authorization: Bearer <your-token>
Channel starten / stoppen¶
Response (200 OK):
Channel-Gesundheit¶
Response (200 OK):
{
"id": "uuid",
"connected": true,
"platform": "slack",
"workspace_name": "my-team",
"channels_active": 3,
"last_message_at": "2026-03-03T15:42:00Z",
"uptime_secs": 86400
}
Identitaetszuordnungen¶
GET /api/v1/channels/{id}/mappings
POST /api/v1/channels/{id}/mappings
Authorization: Bearer <your-token>
Ordnet Plattform-Benutzer Symbiont-Identitaeten fuer Agent-Interaktionen zu.
Channel-Audit-Log¶
Scheduler-Features¶
Echte Aufgabenausfuehrung: - Prozess-Spawning mit sicheren Ausfuehrungsumgebungen - Ressourcenueberwachung (Speicher, CPU) mit 5-Sekunden-Intervallen - Gesundheitspruefungen und automatische Fehlererkennung - Unterstuetzung fuer ephemere, persistente, geplante und ereignisgesteuerte Ausfuehrungsmodi
Ordnungsgemaesses Herunterfahren: - 30-Sekunden-Frist fuer ordnungsgemaesse Beendigung - Erzwungene Beendigung fuer nicht reagierende Prozesse - Ressourcenbereinigung und Metriken-Persistenz - Warteschlangenbereinigung und Zustandssynchronisierung
Erweiterte Kontextverwaltung¶
Erweiterte Suchfaehigkeiten:
{
"query_type": "keyword|temporal|similarity|hybrid",
"search_terms": ["term1", "term2"],
"time_range": {
"start": "2024-01-01T00:00:00Z",
"end": "2024-01-31T23:59:59Z"
},
"memory_types": ["factual", "procedural", "episodic"],
"relevance_threshold": 0.7,
"max_results": 10
}
Wichtigkeitsberechnung: - Multi-Faktor-Bewertung mit Zugriffshaeufigkeit, Aktualitaet und Benutzerfeedback - Speichertyp-Gewichtung und Alterungsabklingfaktoren - Vertrauensbewertungsberechnung fuer geteiltes Wissen
Zugriffskontrollintegration: - Richtlinien-Engine verbunden mit Kontextoperationen - Agentenspezifischer Zugriff mit sicheren Grenzen - Wissensaustausch mit granularen Berechtigungen
Tool Review API (Produktion)¶
Die Tool Review API bietet einen vollstaendigen Workflow zur sicheren Ueberpruefung, Analyse und Signierung von MCP (Model Context Protocol) Tools unter Verwendung KI-gesteuerter Sicherheitsanalyse mit menschlichen Ueberwachungsfaehigkeiten.
Basis-URL¶
Authentifizierung¶
Alle Endpunkte erfordern Bearer JWT-Authentifizierung:
Kern-Workflow¶
Die Tool Review API folgt diesem Request/Response-Flow:
graph TD
A[Tool Einreichen] --> B[Sicherheitsanalyse]
B --> C{Risikobewertung}
C -->|Geringes Risiko| D[Auto-Genehmigung]
C -->|Hohes Risiko| E[Menschliche Review-Warteschlange]
E --> F[Menschliche Entscheidung]
F --> D
D --> G[Code-Signierung]
G --> H[Signiertes Tool Bereit]
Endpunkte¶
Review-Sitzungen¶
Tool zur Ueberpruefung einreichen¶
Reicht ein MCP-Tool zur Sicherheitsueberpruefung und -analyse ein.
Request Body:
{
"tool_name": "string",
"tool_version": "string",
"source_code": "string",
"metadata": {
"description": "string",
"author": "string",
"permissions": ["array", "of", "permissions"]
}
}
Response:
Review-Sitzungen auflisten¶
Ruft eine paginierte Liste von Review-Sitzungen mit optionaler Filterung ab.
Query-Parameter:
- page (integer): Seitennummer fuer Paginierung
- limit (integer): Anzahl der Elemente pro Seite
- status (string): Nach Review-Status filtern
- author (string): Nach Tool-Autor filtern
Response:
{
"sessions": [
{
"review_id": "uuid",
"tool_name": "string",
"status": "string",
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T11:00:00Z"
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 100,
"has_next": true
}
}
Review-Sitzungsdetails abrufen¶
Ruft detaillierte Informationen ueber eine bestimmte Review-Sitzung ab.
Response:
{
"review_id": "uuid",
"tool_name": "string",
"tool_version": "string",
"status": "string",
"analysis_results": {
"risk_score": 85,
"findings": ["array", "of", "security", "findings"],
"recommendations": ["array", "of", "recommendations"]
},
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T11:00:00Z"
}
Sicherheitsanalyse¶
Analyseergebnisse abrufen¶
Ruft detaillierte Sicherheitsanalyseergebnisse fuer eine bestimmte Analyse ab.
Response:
{
"analysis_id": "uuid",
"review_id": "uuid",
"risk_score": 85,
"analysis_type": "automated",
"findings": [
{
"severity": "high",
"category": "code_injection",
"description": "Potential code injection vulnerability detected",
"location": "line 42",
"recommendation": "Sanitize user input before execution"
}
],
"rag_insights": [
{
"knowledge_source": "security_kb",
"relevance_score": 0.95,
"insight": "Similar patterns found in known vulnerabilities"
}
],
"completed_at": "2024-01-15T10:45:00Z"
}
Menschlicher Review-Workflow¶
Review-Warteschlange abrufen¶
Ruft Elemente ab, die auf menschliche Ueberpruefung warten, typischerweise hochriskante Tools, die manuelle Inspektion erfordern.
Response:
{
"pending_reviews": [
{
"review_id": "uuid",
"tool_name": "string",
"risk_score": 92,
"priority": "high",
"assigned_to": "reviewer@example.com",
"escalated_at": "2024-01-15T11:00:00Z"
}
],
"queue_stats": {
"total_pending": 5,
"high_priority": 2,
"average_wait_time": "2h 30m"
}
}
Review-Entscheidung einreichen¶
Reicht die Entscheidung eines menschlichen Reviewers zu einem Tool-Review ein.
Request Body:
{
"decision": "approve|reject|request_changes",
"comments": "Detailed review comments",
"conditions": ["array", "of", "approval", "conditions"],
"reviewer_id": "reviewer@example.com"
}
Response:
{
"review_id": "uuid",
"decision": "approve",
"processed_at": "2024-01-15T12:00:00Z",
"next_status": "approved_for_signing"
}
Tool-Signierung¶
Signierungsstatus abrufen¶
Ruft den Signierungsstatus und Signaturinformationen fuer ein ueberprueftes Tool ab.
Response:
{
"review_id": "uuid",
"signing_status": "completed",
"signature_info": {
"algorithm": "RSA-SHA256",
"key_id": "signing-key-001",
"signature": "base64-encoded-signature",
"signed_at": "2024-01-15T12:30:00Z"
},
"certificate_chain": ["array", "of", "certificates"]
}
Signiertes Tool herunterladen¶
Laedt das signierte Tool-Paket mit eingebetteter Signatur und Verifizierungsmetadaten herunter.
Response: Binaerer Download des signierten Tool-Pakets.
Statistiken und Ueberwachung¶
Workflow-Statistiken abrufen¶
Ruft umfassende Statistiken und Metriken zum Review-Workflow ab.
Response:
{
"workflow_stats": {
"total_reviews": 1250,
"approved": 1100,
"rejected": 125,
"pending": 25
},
"performance_metrics": {
"average_review_time": "45m",
"auto_approval_rate": 0.78,
"human_review_rate": 0.22
},
"security_insights": {
"common_vulnerabilities": ["sql_injection", "xss", "code_injection"],
"risk_score_distribution": {
"low": 45,
"medium": 35,
"high": 20
}
}
}
Rate Limiting¶
Die Tool Review API implementiert Rate Limiting pro Endpunkt-Typ:
- Einreichungs-Endpunkte: 10 Anfragen pro Minute
- Abfrage-Endpunkte: 100 Anfragen pro Minute
- Download-Endpunkte: 20 Anfragen pro Minute
Rate Limit-Header sind in allen Responses enthalten:
Fehlerbehandlung¶
Die API verwendet Standard-HTTP-Statuscodes und gibt detaillierte Fehlerinformationen zurueck:
{
"error": {
"code": "INVALID_REQUEST",
"message": "Tool source code is required",
"details": {
"field": "source_code",
"reason": "missing_required_field"
}
}
}
CLI-Subcommands¶
Neben der langlebigen HTTP-Oberflaeche stellt symbi mehrere reine CLI-Subcommands fuer einmalige Operationen bereit. Der vollstaendige Katalog findet sich in symbi --help; die fuer Integration und Richtliniendurchsetzung relevantesten sind:
symbi schemapin¶
TOFU-Integritaetspinning (Trust-On-First-Use) fuer MCP-Server-Konfigurationen. Konzipiert fuer den Aufruf aus SessionStart-Hooks, damit sich der Konfigurations-Hash eines MCP-Servers zwischen Sitzungen nicht unbemerkt aendern kann, ohne dass der Operator zustimmt.
# Gepinnten Hash fuer einen oder alle MCP-Server in .mcp.json verifizieren
symbi schemapin verify [--mcp-server <NAME>] [--config <PATH>]
# Aktuellen Konfigurations-Hash fuer einen Server pinnen
symbi schemapin pin --mcp-server <NAME> [--config <PATH>] [--force]
# Alle gepinnten Server unter ~/.symbiont/schemapin/mcp/ auflisten
symbi schemapin list
# Einen Pin-Eintrag entfernen
symbi schemapin unpin --mcp-server <NAME>
Pins werden unter ~/.symbiont/schemapin/mcp/ als JSON-Eintraege gespeichert. verify beendet mit 0 bei Uebereinstimmung, mit einem Wert ungleich Null bei Abweichung oder fehlendem Pin — geeignet fuer den Einsatz in Pre-Session-Skripten.
symbi policy¶
Cedar-Richtlinienevaluierung gegen Tool-Call-Events. Liest ein einzelnes Event als JSON, entscheidet allow / deny gegenueber einem Richtlinienverzeichnis und beendet sich mit einem fuer Skripting geeigneten Statuscode.
# Ein von stdin gelesenes Event evaluieren
echo '{"principal":"Agent::\"dev\"", "action":"write", "resource":{...}}' \
| symbi policy evaluate --stdin --policies ./policies
# Ein aus einer Datei gelesenes Event evaluieren
symbi policy evaluate --input event.json --policies ./policies
# Nur strukturiertes JSON ausgeben (geeignet fuer programmatische Nutzung)
symbi policy evaluate --stdin --policies ./policies --json
Die Standardausgabe ist das blosse Urteil auf stdout mit strukturierten Details auf stderr; --json fasst alles zu stdout-JSON zusammen. Das ist dieselbe Cedar-Entscheidungslogik, die das Runtime inline verwendet — nuetzlich fuer Shift-Left-Richtlinientests in CI und zum Debuggen von Ablehnungen ausserhalb eines laufenden Runtimes.
symbi agents-md¶
Regeneriert AGENTS.md aus den aktuellen agents/*.symbi-Dateien (das Legacy-Format .dsl wird ebenfalls erfasst). Laeuft automatisch waehrend symbi init; rufen Sie es manuell nach dem Hinzufuegen oder Bearbeiten von Agentendefinitionen auf.
Erste Schritte¶
Runtime HTTP API¶
-
Das
symbi-Binary bauen (dashttp-api-Feature ist in der Binary-Crate standardmaessig aktiv): -
Runtime starten -- die API lauscht auf
:8080, HTTP Input auf:8081:
Fuer ein vorgeneriertes Projekt und den empfohlenen Docker-Ablauf siehe Erste Schritte.
-
Ueberpruefen, ob der Server laeuft:
-
Authentifizierten Endpunkt testen --
symbi upgibt das erzeugte Bearer-Token beim Start aus (oder setzen Sie eines explizit mit--http.token):
Tool Review API¶
- API-Anmeldedaten von Ihrem Symbiont-Administrator erhalten
- Tool zur Ueberpruefung ueber den
/sessionsEndpunkt einreichen - Review-Fortschritt ueber
/sessions/{reviewId}ueberwachen - Signierte Tools von
/signing/{reviewId}/downloadherunterladen
Support¶
Fuer API-Support und Fragen: - Ueberpruefen Sie die Runtime-Architektur-Dokumentation - Konsultieren Sie die Sicherheitsmodell-Dokumentation - Melden Sie Probleme im GitHub-Repository des Projekts
Ein abgeglichener (reconciled) Aufruf liefert HTTP 409 und die separat signierte
Betreiber-resolution; er liefert niemals einen konstruierten Runtime-Abschluss.
Die Cron-Historie behaelt den Status Reconciled, den urspruenglichen Fehler samt
Audit sowie das Resolution-Objekt. Der Job bleibt bis zum expliziten Fortsetzen
pausiert. Siehe Betreiber-Abgleich.