Deklariere einen Agenten in einer Markdown-Datei. Führ ihn in deinem Terminal aus.
Jede Aktion, die er ausführt, wird gegen die Policy geprüft, die du geschrieben hast — und wenn er dich braucht, wartet er, dauerhaft: Antworte aus deinem Terminal oder vom Handy, Tage später, und der Lauf setzt genau einmal fort.
Du baust keinen Agenten. Du deklarierst einen.
Markdown mit YAML-Frontmatter — dieselbe Datei, die Claude Code liest, und dieselbe, die Copilot, Cursor, OpenCode und Antigravity führen. Reinlegen genügt, der nächste Lauf nimmt sie auf: kein Build-Schritt, keine Plugin-API, nichts zu konvertieren.
Installiert contenox. Dann contenox setup für Provider und Modell — und contenox beam, um loszulegen.
Wege hinein
Zuerst dein Terminal. Dein Editor, wenn dir das lieber ist. Ein Host, wenn niemand an der Maschine sitzt.
Dieselbe Runtime, dieselben Deklarationen, derselbe Envelope, derselbe Sitzungszustand. Unterschiedlich ist nur, wer für die Maschine geradesteht, auf der es läuft.
contenox beam
Die Vordertür: du, an der Tastatur, auf deinem eigenen Gerät. Das Transkript steht in deinem normalen Terminal-Scrollback, der Composer nimmt / für Kommandos und @, um dem Agenten eine Datei vorzulegen, und ein gegateter Aufruf öffnet eine Freigabekarte, die ein Tastendruck beantwortet. Dateisystem und Terminal laufen nativ. Ein blankes contenox im Terminal öffnet beam.
Dein Editor
Zed, JetBrains, AionUi oder OpenClaw startet contenox als ACP-Subprozess über stdio — kein Plugin-Lock-in, und Freigaben laufen über die Oberfläche des Editors. Laut Protokoll gehört der Workspace dem Editor: Die Session arbeitet in dem Projekt, das du ohnehin offen hast.
contenox serve, und die App
Die Form für Organisationen: ein stehender Host mit genau einem Workspace, festgelegt beim Start, ganz ohne Dateisystem- und Terminal-Tools — jede Fähigkeit ist ein MCP-Server, den du angehängt hast. Angetrieben wird er von Konnektoren und Event-Triggern, und die App erreicht ihn über das Relay. Eine Workspace-Auswahl gibt es nirgends: Ein Client entdeckt Instanzen und die Sessions, die sie schon halten.
Du schreibst die Regeln
Wie viel Agency? Das entscheidest du — schriftlich.
Jeder Lauf ist durch einen Envelope begrenzt: eine JSON-Policy, die benennt, was still durchläuft, was für einen Menschen pausiert und was verweigert wird — plus harte Obergrenzen für Tool-Aufrufe und Tokens und eine Festlegung, welche Modelle und Backends der Lauf nutzen darf. Kein versteckter Prompt entscheidet für dich. Die Datei liegt in deinem Repo und wird reviewt wie jede andere Änderung.
{
"default_action": "approve",
"compute": { "maxToolCalls": 300, "maxTokens": 2000000, "onExhausted": "finish_stuck" },
"rules": [
{ "tools": "local_fs", "tool": "*", "action": "deny",
"when": [{ "key": "path", "op": "glob",
"value": "**/{.ssh,.aws,.kube,.config/gcloud}/**" }] },
{ "tools": "local_fs", "tool": "read_file", "action": "allow" },
{ "tools": "local_fs", "tool": "write_file", "action": "approve" },
{ "tools": "local_shell", "tool": "local_shell", "action": "allow",
"when": [{ "key": "command", "op": "command_prefix_allowlist",
"value": "go test,go vet,ls,cat,grep,npm test,pytest" }] },
{ "tools": "local_shell", "tool": "local_shell", "action": "approve" }
],
"attention": { "allowAgentAnswers": false }
} Gekürzt aus dem mitgelieferten Default-Preset. Was keine Regel trifft, schlägt geschlossen fehl — es fragt einen Menschen. Sechs Presets kommen mit contenox init, und contenox vet prüft deine Policy, bevor irgendetwas unter ihr läuft.
Der dauerhafte Ask
Der Lauf hält an. Der Prozess endet. Tage später setzt eine Antwort ihn fort.
Jedes Harness kann für einen Menschen pausieren, solange es die Verbindung offen hält. Die Verbindung zu halten ist nicht der schwere Teil — das Warten zu überleben schon. Ein contenox-Lauf checkpointet an der Stelle, an der er anhielt, gibt den Prozess frei und nimmt genau dort wieder auf, sobald jemand antwortet — von überall.
Kein Babysitten am Terminal, keine Freigabe, die verfällt, weil du geschlafen hast, keine stille Änderung, während du weg warst. Der Envelope hat entschieden, was unbeaufsichtigt laufen darf, die Deklaration nichts darüber hinaus, und eine Antwort hat den Lauf genau einmal fortgesetzt.
Das Artefakt
Ein Agent ist eine Datei. Ein Workflow ist ein Verzeichnis.
Eine Deklaration ist Markdown mit YAML-Frontmatter: ein Name, die Tools, die sie aufrufen darf, das Modell — und ein Rumpf, der zum System-Prompt wird. Leg Deklarationen in ein Verzeichnis, und das Verzeichnis ist der Workflow: Die agent.md an der Spitze liest die Anfrage, antwortet mit einem Label, und der Zweig dieses Namens übernimmt — mit eigener Instruktion, eigenen Tools, eigenem Budget.
default: im Frontmatter des Routers benennt den Zweig, in den ein unbekanntes Label fällt — den engsten, nie den mächtigsten. contenox kompiliert das Verzeichnis beim nächsten Lauf in die Chain, die es ausführt, und die Policy, unter der sie läuft — nach .generated/. Beide sind JSON-Schema-validiert, beide darfst du lesen, keine musst du pflegen.
- →Ein Zweig ist Spezialist durch das, was er hält, nicht durch seine Formulierung: Benenne seine Tools, und jedes andere wird dort entzogen, wo Aufrufe ausgeführt werden — nicht dadurch, dass man es dem Modell bloß nicht anbietet.
- →Ein Support-Desk schickt Abrechnungsfragen an einen lesenden Zweig mit der Billing-API und Kontoänderungen an einen, der schreiben darf, aber für einen Menschen anhält.
- →Ein Backoffice schickt „fasse das zusammen“ und „extrahiere diese Felder“ an Zweige mit unterschiedlichen Ausgabe-Kontrakten — der Aufrufer bekommt parsebare Ausgabe, ohne jedes Mal darum zu bitten.
- →Eine regulierte Installation schickt alles, was regulierte Daten berührt, an einen Zweig unter strengerem Envelope — unabhängig davon, wie die Anfrage formuliert war.
Tools
Bring die Tools mit, die du brauchst. Sonst nichts.
contenox liefert keine eigenen Tools mit. Es besitzt die Tool-Grenze — was auf der anderen Seite steht, entscheidest du. Jedes Tool, das du nicht brauchst, sind Tokens auf jedem Turn und eine Sache mehr zu regeln. Tools überqueren diese Grenze auf zwei Wegen — und beide wählst du.
Vom Client
beam und jeder Editor führen fs/* und terminal/* als Capabilities. contenox reicht den Aufruf weiter, der Client führt ihn aus, in dem Workspace, der ohnehin offen ist. local_fs sind fünf Tools: read_file, write_file, edit_file, sed, read_file_range. Auflisten und Suchen laufen über die Shell — auf der Client-Seite der Grenze. Und contenox serve hat keinen solchen Client, also auch keines dieser beiden Toolsets.
Vom Operator
Häng jeden MCP-Server an — stdio, SSE oder HTTP — oder jeden HTTP-Dienst mit OpenAPI-Spec. Er registriert sich einmal, und seine Tools werden policy-begrenzte Tools, die ein Agent benennt wie jedes andere. Eine Deklaration darf auch eigene mitbringen: für keinen anderen Agenten erreichbar, stillgelegt, sobald du die Datei löschst.
Von welcher Seite ein Aufruf auch kommt: Er überquert eine Grenze und wird gegen einen Envelope geprüft, bevor er läuft.
Das Argument
Apache machte Ausliefern zu etwas, das man installiert. HTML wurde zu etwas, das man schreibt.
1994 hat man keine Website ausgeliefert, man hat einen Server geschrieben: Request parsen, Verbindung halten, entscheiden, was rausgeht — alles verschweißt mit genau dem Inhalt, für den es da war. Dann wurde der Server zu etwas, das man installiert, und beides fiel auseinander. HTML schrieben Leute, die nie einen Socket angefasst haben — und das Web danach haben sie gebaut.
Wer heute Agenten baut, steht wieder auf der falschen Seite dieser Linie und zimmert dieselbe Maschine von Hand: die Schleife, das Tool-Gate, den Freigabe-Fluss, die Sitzungspersistenz — verschweißt mit einem Prompt, im nächsten Unternehmen neu geschrieben. contenox macht diese Maschine zur Infrastruktur und die Deklaration zum Artefakt. Die Maschine ist nicht das Interessante. Wer ihre Kontrollen hält, schon.
Apache, 1995
contenox, heute
Du installierst den Server.
Du installierst die Runtime.
Du schreibst HTML. Der Server schreibt dir nie eine Seite.
Du deklarierst Agenten in Markdown. Der Server liefert keinen deiner Agenten mit.
Module erweitern ihn. Apache lieferte keine Websites.
MCP-Server und die Fähigkeiten deines Editors liefern die Tools. Du bringst die mit, die du brauchst.
Er lieferte das HTML aus, das du schon hattest.
Es liest die Deklarationen, die du schon führst — Claude Code, Copilot, Cursor, OpenCode, Antigravity.
Verbindungsverwaltung ist Infrastruktur. Niemand schreibt sie sich selbst.
Der dauerhafte Ask ist Infrastruktur: Ein Lauf hält an, checkpointet, überlebt einen Neustart, läuft weiter, wenn ein Mensch antwortet.
Fünf Agenten liegen bei. Sie sind die Standardseite, nicht das Produkt — ein Beispiel für das Artefakt, dazu da, durch deines ersetzt zu werden. Und da hört die Analogie auf: Apache lieferte keinen Browser mit, contenox liefert einen. contenox beam ist er — erste Hand, im selben Repository, damit die Vordertür nie das Produkt von jemand anderem ist. Ein Client bleibt er trotzdem: Die Policy, die er anzeigt, wird unter ihm durchgesetzt, nicht von ihm.
Standardmäßig deins
Dein Rechner, dein Zustand, deine Modelle.
- →Sessions, Konfiguration, Run-Logs und erfasster Ausführungszustand liegen auf deinem Rechner. Kein Konto, kein contenox-Dienst dazwischen — außer du pairst mit dem optionalen Relay unten. Telemetrie ist opt-in und standardmäßig aus.
- →Inferenz ist Konfiguration: lokales Ollama oder vLLM, wenn nichts dein Netzwerk verlassen darf — oder OpenAI, Anthropic, Gemini, Bedrock und Vertex mit deinen eigenen Schlüsseln, gepinnt auf eine Region deiner Wahl. Ein späterer Wechsel ist eine Konfigurationsänderung, kein Umbau.
- →Secrets werden zur Anfragezeit aus deiner Umgebung aufgelöst und landen nie in einer Config auf der Platte. Jeder Envelope verweigert .ssh, .aws und .kube unter jeder Berechtigungsstufe, auch der lockersten.
Optional: das gehostete Relay
Deine Session, auf deinem Handy.
Alles oben läuft ohne Konto. Wenn eine laufende Session von woanders erreichbar sein soll, pairst du den Rechner mit dem gehosteten Relay: ein getippter Schlüssel aus der contenox-App, kein Browser auf der Maschine. Der Rechner baut die Verbindung selbst nach außen auf und sendet genau zwei Dinge — den Schlüssel und seinen Hostnamen. Danach liest du das Transkript und beantwortest Freigaben vom Handy. Kostenlos für dich und drei Teamkollegen, je eine Maschine — und eine Installation, die nie pairt, kontaktiert kein Relay.
Wir provisionieren und betreiben contenox-Agenten auch für dich — managed, zu deinen Bedingungen. Sag uns, worum es geht, und wir richten es ein: sprich mit uns die gehostete App ansehen
Loslegen
Deklariere einen Agenten. Feuere deine erste Mission ab.
Fragen? hello@contenox.com · Issues und PRs auf GitHub
Baut auf
Lokale Modelle laufen über Ollama oder vLLM und deren lokale APIs; gehostete Provider über ihre öffentlichen APIs. Keine mitgelieferte Inferenz-Runtime, keine GPU-Treiber im Paket.