OctopOS API-Referenz

Basis-URL: https://<server>/api — Alle Endpoints außer /health, /setup/*, /auth/* und /hooks/* erfordern einen JWT-Bearer-Token.

Authorization: Bearer <token>

Token wird via POST /auth/login erhalten.

Auth

POST/auth/login

Authentifizierung mit Benutzername und Passwort. Gibt einen JWT-Token zurück.

FeldTypBeschreibung
usernamestringBenutzername
passwordstringPasswort

Request Body:

{ "username": "admin", "password": "geheim" }

Response 200:

{ "access_token": "eyJ...", "token_type": "bearer" }
Rate-Limit: 10 Versuche pro Minute. Bei Überschreitung: 429 Too Many Requests.

GET/auth/me

Gibt Informationen über den aktuell eingeloggten Benutzer zurück.

Response 200:

{ "username": "admin" }

Setup

GET/setup/status

Prüft ob der Setup-Wizard noch benötigt wird (kein Benutzer angelegt).

Response 200:

{ "needs_setup": true }

POST/setup

Legt den ersten Admin-Account an. Nur verfügbar solange noch kein Benutzer existiert.

FeldTypBeschreibung
usernamestringBenutzername des ersten Admins
passwordstringPasswort (min. 8 Zeichen)

Response 201:

{ "created": true, "username": "admin", "role": "admin" }

System

GET/health

Health-Check ohne Authentifizierung. Für Monitoring und Load-Balancer geeignet.

Response 200:

{ "status": "ok" }

GET/status

Detaillierter Systemstatus mit Discovery-, Projekt-, Session- und Laufzeit-Informationen.

Response 200:

{
  "discovery": { ... },
  "projects": { ... },
  "sessions": { ... },
  "runtime": { ... }
}

Gitea & Git Tools

GET/gitea/config

Gibt URL, Organisation, Webhook-Secret und maskierten Token zurück.

PUT/gitea/config

Schreibt neue Gitea-URL/org/Token (Admin only). Token-Datei wird auf 600 gelegt.

GET/gitea/repos

Listet Repositories der Organisation oder des Users.

GET/gitea/repos/{project_id}/prs

Gibt offene Pull Requests eines Projekts zurück.

Agenten

GET/agents

Gibt eine Liste aller registrierten Agenten zurück.

GET/agents/{id}

Gibt Details zu einem einzelnen Agenten zurück.

POST/agents

Erstellt einen neuen Agenten.

FeldTypBeschreibung
idstringEindeutige Agent-ID
typestringboss / specialist / worker
identitystringAnzeigename des Agenten
modelstringLLM-Modell (z.B. llama3.1:8b)
temperaturefloatTemperatur (0.0–1.0)
max_tokensintMaximale Token-Anzahl
toolsarrayListe aktivierter Tool-IDs
soulstringPersönlichkeitsbeschreibung (Markdown)
heartbeatobjectHeartbeat-Konfiguration (interval, timeout, on_failure)

PUT/agents/{id}

Aktualisiert einen bestehenden Agenten. Body-Felder wie bei POST.

DELETE/agents/{id}

Löscht einen Agenten. Response 204 No Content.

GET/agents/{id}/soul

Gibt den Soul-Text (Persönlichkeitsbeschreibung) des Agenten als Plaintext zurück.

GET/agents/{id}/logs

Gibt die letzten Log-Einträge des Agenten zurück.

Query-ParameterTypBeschreibung
linesintAnzahl zurückgegebener Log-Zeilen (optional)

Personal Agent

Endpoints unter /me/agent betreffen den persönlichen Agenten inklusive Execution Modes und Tools.

GET/me/agent

Gibt die Konfiguration (LLM, soul, tools, execution_modes) sowie den Runtime-Status zurück.

PUT/me/agent

Aktualisiert Identität, LLM und erlaubte Tools. Execution Modes: default (safe), elevated, root, nur Admin darf erhöhte Modi anfordern.

POST/me/agent/message/stream

Streamt die Antwort des persönlichen Agenten (SSE). Optionaler Parameter execution_mode (wird auditierbar protokolliert).

GET/me/agent/session/history

History der persönlichen Session, die zusammengefasste Kontextbotschaften enthält.

DELETE/me/agent/session

Leert die aktive Session (history wird persistiert) — Einsatz bei Reset oder Trainingsrestart.

Memory & A-MEM

Memory-Dateien liegen lokal unter /agents/{id}/memory/. A-MEM ist ein MCP-basierter Shared Memory-Server (Port 8020) für teamweite Erkenntnisse.

POST/agents/{agent_id}/memory

Speichert oder hängt Inhalt an eine Memory-Datei an. Parameter: filename, content, mode ("overwrite"/"append").

POST/agents/{agent_id}/session/compact

Komprimiert die Session via Claude (OAuth) und ersetzt alte Nachrichten durch eine Zusammenfassung zur Token-Kontrolle.

WKS / Discord / MCP

Externe Toolzugriffe über Workstation, Discord-Bot-Config oder MCP werden über eigene Endpoints behandelt.

GET/me/wks

Zeigt Workstation-IP, SSH-User, Ollama-Port und ob ein SSH-Key bekannt ist.

PUT/me/wks

Speichert WKS-Zugangsdaten und optional den SSH-Key.

GET/me/wks/ollama-models

Listet Modelle auf, die auf der konfigurierten Workstation verfügbar sind.

GET/me/discord

Zeigt Discord-Bot-Token, Guild und Channels.

PUT/me/discord

Aktualisiert Discord-Bot-Token, Guild-ID und Channels.

POST/me/discord/test

Sendet einen Test-Webhook an den eingerichteten Discord-Channel.

GET/mcp/servers

Listet alle MCP-Server (A-MEM, QMD, Custom) mit Transport und URL.

POST/admin/update/trigger

Startet den Self-Update-Prozess (Admin only). Antwort: {"status":"deploying"}.

GET/admin/update/status

Zeigt laufenden/neuesten Update-Status mit Commit-Hash und Log-Tail.

Agent Skills

GET/agents/{id}/skills

Gibt alle Skills eines Agenten zurück.

POST/agents/{id}/skills

Erstellt einen neuen Skill für den Agenten.

FeldTypBeschreibung
filenamestringDateiname (z.B. steuerrecht.md)
skillstringAnzeigename des Skills
versionstringVersionsnummer (z.B. "1.0")
scopestringalways oder on-demand
triggersarrayTrigger-Keywords (für on-demand)
priorityintPriorität (niedrigere Zahl = höhere Priorität)
contentstringSkill-Inhalt (Markdown)

PUT/agents/{id}/skills/{filename}

Aktualisiert einen bestehenden Skill. Body-Felder wie bei POST.

DELETE/agents/{id}/skills/{filename}

Löscht einen Skill. Response 204 No Content.

Projekte

GET/projects

Gibt eine Liste aller Projekte zurück.

GET/projects/{id}

Gibt Details zu einem einzelnen Projekt zurück.

POST/projects

Erstellt ein neues Projekt.

FeldTypBeschreibung
idstringEindeutige Projekt-ID
namestringAnzeigename des Projekts
descriptionstringProjektbeschreibung (optional)
bossstringAgent-ID des Boss-Agenten
workersarrayListe der Worker-Agent-IDs
sambaboolSamba-Freigabe aktivieren

POST/projects/{id}/provision

Provisioniert ein Projekt: legt Linux-User, Verzeichnis, Matrix-Room und optionale Samba-Freigabe an.

DELETE/projects/{id}/provision

Entfernt die Provisionierung eines Projekts (Linux-User, Freigaben). Das Projekt selbst bleibt bestehen.

DELETE/projects/{id}

Löscht ein Projekt vollständig. Response 204 No Content.

Chat

POST/projects/{id}/message

Sendet eine Nachricht an den Boss-Agenten eines Projekts. Wartet auf die vollständige Antwort.

Request Body:

{ "content": "Erstelle einen Bericht über Q1." }

Response 200:

{
  "response": "Hier ist der Q1-Bericht...",
  "workers": ["steuer-agent", "buchhalter"],
  "session_id": "sess_abc123"
}

POST/projects/{id}/message/stream

Sendet eine Nachricht und empfängt die Antwort als Server-Sent Events (SSE). Jedes Event enthält einen JSON-Payload.

data: {"text": "Hier "}
data: {"text": "ist "}
data: {"text": "der Bericht..."}
data: {"done": true}

# Bei Fehler:
data: {"error": "LLM nicht erreichbar"}

GET/projects/{id}/session/history

Gibt die Chat-History der aktuellen Session zurück.

Query-ParameterTypBeschreibung
limitintMaximale Anzahl zurückgegebener Nachrichten (optional)

Webhooks

GET/projects/{id}/webhooks

Gibt alle konfigurierten Webhooks eines Projekts zurück.

POST/projects/{id}/webhooks

Erstellt einen neuen ausgehenden Webhook für ein Projekt.

FeldTypBeschreibung
namestringName des Webhooks
urlstringZiel-URL für den Webhook
secretstringHMAC-Secret für Signierung (optional)
eventsarrayEvents die den Webhook auslösen

Verfügbare Events: message, agent_error, provision, agent_start, agent_stop

DELETE/projects/{id}/webhooks/{webhook_id}

Löscht einen Webhook. Response 204 No Content.

POST/projects/{id}/webhooks/test

Sendet einen Test-Request an alle konfigurierten Webhooks des Projekts.

POST/hooks/{id}/wake

Kein Auth erforderlich. Externer Trigger-Endpoint für eingehende Webhooks. Startet den Boss-Agenten des Projekts asynchron.

Request Body:

{ "message": "Neuer Git-Push auf main — bitte Code-Review starten" }

Response 202:

{ "accepted": true, "project_id": "mein-projekt" }
Kein Auth: Dieser Endpoint ist bewusst öffentlich zugänglich. Er kann ohne Token aufgerufen werden — z.B. von GitHub Actions oder Gitea Webhooks.

Benutzer

GET/users

Gibt eine Liste aller Benutzer zurück.

POST/users

Erstellt einen neuen Benutzer.

FeldTypBeschreibung
usernamestringBenutzername
passwordstringPasswort (min. 8 Zeichen)

DELETE/users/{username}

Löscht einen Benutzer. Der eigene Account kann nicht gelöscht werden. Response 204 No Content.

PUT/users/{username}/password

Ändert das Passwort eines Benutzers.

{ "password": "neues-passwort" }

Audit-Log

GET/audit/logs

Gibt Audit-Log-Einträge zurück, optional gefiltert.

Query-ParameterTypBeschreibung
limitintMaximale Anzahl Einträge
userstringFiltern nach Benutzer
actionstringFiltern nach Aktion
projectstringFiltern nach Projekt-ID

Response 200:

{
  "logs": [
    {
      "id": "log_abc",
      "timestamp": "2026-03-20T14:32:00Z",
      "user": "admin",
      "action": "user.login",
      "target": "admin",
      "project_id": null,
      "ip": "192.168.178.1",
      "details": {}
    }
  ],
  "count": 1
}

Bekannte Aktionen:

LLM-Konfiguration

GET/llm/config

Gibt die aktuelle LLM-Konfiguration zurück (alle Anbieter).

PUT/llm/config/claude_max

Setzt den Claude Max OAuth-Token.

{ "token": "sk-ant-oat01-..." }

PUT/llm/config/{provider}

Konfiguriert einen beliebigen LLM-Anbieter (z.B. openai, ollama).

GET/llm/claude_token_status

Gibt den Status des aktuellen Claude-Tokens zurück.

Response 200:

{
  "exists": true,
  "remaining_days": 12,
  "expires_approx": "2026-04-01",
  "status": "ok"
}
StatusBedeutung
okToken gültig, mehr als 7 Tage verbleibend
warningToken läuft in weniger als 7 Tagen ab
criticalToken läuft in weniger als 2 Tagen ab
expiredToken abgelaufen

GET/llm/ollama/models

Gibt eine Liste der lokal verfügbaren Ollama-Modelle zurück.

POST/llm/ollama/pull

Lädt ein Ollama-Modell herunter.

{ "model": "llama3.1:8b" }

Tools

GET/tools

Gibt eine Liste aller registrierten Tools mit ID, Beschreibung und Parameter-Schema zurück.

System-Logs

GET/logs/core

Gibt die letzten Zeilen der Core-Logs zurück.

Query-ParameterTypBeschreibung
linesintAnzahl Zeilen (Standard: 200, Maximum: 1000)