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.

Der Python-Client liegt öffentlich in github.com/Athron-new/compass-agents unter sdk/python (MIT; Installation aus einem Checkout mit pip install -e sdk/python). Keiner der beiden Clients ist auf PyPI oder npm veröffentlicht. Beide teilen sich dasselbe Auth-Modell wie alles andere in COMPASS: Kopfzeile X-Compass-Key, ein Schlüssel je Aufruf.

Regeln setzt ein Mensch. regel_setzen / regelSetzen braucht zusätzlich das Sitzungs-Token einer angemeldeten Person (Compass(..., menschen_sitzung=...) in Python, new Compass(url, key, { menschenSitzung }) in TypeScript oder die Umgebungsvariable COMPASS_MENSCHEN_SITZUNG; es kommt aus POST /auth/anmelden, s. Quickstart). Ohne es antwortet der Kern mit 403. Das Token ist wie der Schlüssel ein Geheimnis. COMPASS_MENSCHEN_SITZUNG gehört nie in die Umgebung eines Agenten: Der Kern kann Mensch und Agent dann nicht mehr trennen, und die Regel „Regeln setzt der Mensch" ist für diesen Agenten aufgehoben.

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; braucht die Sitzung eines Menschen)
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).