COMPASS-Doku

SDKs verwenden

Für einen Agenten, der keinen MCP-Server starten kann (oder schlicht eine direkte Abhängigkeit statt eines Unterprozesses will), sprechen zwei dünne Client-Bibliotheken direkt die REST-API des Kerns an — kein MCP dazwischen. Sie decken dieselben sieben Verben ab, die der MCP für den üblichen Weg anbietet: prüfen, was gilt, fragen warum, eine Sache anlegen, eine Regel setzen/ablösen, eine Lehre festhalten, suchen und das Regelwerk exportieren.

Beide liegen in sdk/ in diesem Repo, sind noch nicht in einer Registry veröffentlicht (offene Lizenz, aber bewusst kein PyPI-/npm-Release bisher — Installation direkt aus dem Pfad oder einem Git-Checkout), und teilen sich dasselbe Auth-Modell wie alles andere in COMPASS: Kopfzeile X-Compass-Key, ein Schlüssel je Aufruf.

Python — compass_client

from compass_client import Compass

c = Compass("http://localhost:18080", "<euer-schluessel>")
regel = c.gilt("deploy-freigabe")

Lokale Installation mit pip install -e sdk/python. Einzige Laufzeit-Abhängigkeit: httpx. Ein asynchrones Gegenstück, AsyncCompass, spiegelt jede Methode als async def.

TypeScript — @athron/compass

import { Compass } from "@athron/compass";

const c = new Compass("http://localhost:18080", "<euer-schluessel>");
const regel = await c.gilt("deploy-freigabe");

Gebaut mit tsc (npm run build in sdk/typescript) nach dist/ (ESM, mit .d.ts). Keine Laufzeit-Abhängigkeiten — nutzt das globale fetch.

Das Paket ist nicht veröffentlicht. npm install @athron/compass schlägt fehl (die Registry antwortet 404, gemessen am 02.10.2026) — @athron/compass ist der Name im Repo, keine Bezugsquelle. Bis es veröffentlicht ist, wird das SDK lokal eingebunden, so wie das Python-Gegenstück: npm install ./sdk/typescript oder ein "@athron/compass": "file:../sdk/typescript" in der eigenen package.json. Der import darüber bleibt dadurch unverändert.

Methoden-zu-Route-Übersicht

Beide SDKs bieten dieselben sieben Aufrufe, jeweils in der Namenskonvention der Sprache (snake_case in Python, camelCase in TypeScript):

Python TypeScript Route
c.gilt(sache, ...) c.gilt(sache, ...) GET /gilt/{sache}
c.warum(sache, ...) c.warum(sache, ...) GET /warum/{sache}
c.sache_anlegen(slug, titel, frage, bereich=None, ...) c.sacheAnlegen(slug, titel, frage, bereich?, ...) POST /sachen
c.regel_setzen(sache, text, ersetzt=None, ...) c.regelSetzen(sache, text, { ersetzt?, ... }) POST /aussagen (art=regel)
c.lehre_festhalten(art, titel, was, lehre, ...) c.lehreFesthalten(art, titel, was, lehre, ...) POST /lehren
c.suche(q, ...) c.suche(q, ...) GET /suche — liefert {treffer, gesamt, abgeschnitten, weiter}, kein Array (seit 05.10.2026)
c.export(art="claude-md-section0", ...) c.export(art?, ...) GET /export/claude-md-section0 (auch agents-md, cursor-rules)

Jede Nicht-2xx-Antwort wirft einen strukturierten Fehler — CompassFehler in Python, CompassError in TypeScript — mit status, detail (dem Klartext-Satz, „Fehlerform"), feld (das Feld, das ein 409/422 nennt, falls vorhanden) und allem Übrigen aus dem Antwort-Body (z.B. der geltenden Regel bei einem 409 aus regel_setzen).

Wann SDK statt MCP

Der MCP (mcp/server.py, siehe Claude Code, Cursor und Codex anbinden) passt für einen Agenten, der ohnehin MCP spricht — Claude Code, Cursor, Codex. Die SDKs sind für alles andere: ein CI-Job, ein Backend-Dienst, ein Skript, das nur gilt() braucht, bevor es handelt, ohne Unterprozess oder MCP-Client-Bibliothek dazwischen. Beide sprechen denselben Kern, über denselben REST-Vertrag — keines ist ein zweiter Wahrheitsweg.

Tests

Jedes SDK bringt seine eigene Test-Suite neben dem Quelltext mit (sdk/python/tests, sdk/typescript/tests) — Anfrageform (Pfad, Methode, Kopfzeile, Body) und Fehlerabbildung gegen einen simulierten Kern, dazu eine statische Prüfung, dass jede vom SDK aufgerufene Route tatsächlich im laufenden Kern existiert (dieselbe Gegenprobe, die diese Doku-Seite selbst für ihre eigenen REST-Erwähnungen fährt).