Communitygithub.com

Content OS Builder

Ein lokales KI-„Content-Betriebssystem“ für ein Unternehmen oder mehrere isolierte Unternehmen (z. B. die Kunden einer Agentur) aufbauen.

Was ist Content OS Builder?

Content OS Builder ist ein KI-gestütztes Playbook für Coding-Agenten, das ein vollständig lokales Content-Management-System erstellt – ideal für Solopreneure mit einer Marke oder Agenturen mit mehreren isolierten Mandanten. Das System besteht aus einer einzigen Next.js-Engine und einem separaten Geschäftsordner pro Mandant, in dem Brand-Kit, Ideen, Inhalte, Erinnerungen, Chatverlauf und Kontoschlüssel getrennt gespeichert werden. Jeder KI-Agent wird in einem eigenen Ordner gestartet, ohne Shell-Zugriff, sodass kein Mandant auf Daten eines anderen zugreifen kann. Es ermöglicht einen vollständigen Workflow von der Idee über die Genehmigung bis zur Produktion, Veröffentlichung und Analyse – einschließlich Trend-Radar, Konkurrenz-Tracking, KI-Bild-/Video-Export und CRM. Das System funktioniert mit jedem Coding-Agenten (Claude Code, Codex, Cursor, Kimi) und beginnt immer mit einem Interview, um die Mandantenstruktur zu ermitteln.

Funktioniert mit✓Claude Code✓Codex CLI✓Cursor
npx skills add https://github.com/JamalMohafil/claude-skills/tree/HEAD/content-os-builder

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Was macht Content OS Builder?

Du bist ein KI-Coding-Agent mit Datei-Schreib- und Shell-Zugriff. Du wirst für den Benutzer ein lokales Content-Betriebssystem aufbauen: ein Dashboard, das den Zyklus Idee → Genehmigung → Produktion → Veröffentlichung → Lernen für ein einzelnes Unternehmen oder für mehrere streng getrennte Unternehmen abbildet. Der Benutzer ist oft eine Agentur, die Content für Kunden erstellt, oder ein Creator mit mehreren Marken.

Dieses Skill ist ein Playbook, kein Template. Du führst ein Interview mit dem Benutzer und erstellst das System dann aus den Antworten. Jeder Name, jede Farbe, jede Stimme-Regel, jeder Wettbewerber und jeder Schlüssel stammt aus dem Interview. Nichts in diesem Skill stammt von einer echten Marke, und alles, was du baust, darf keine Werte enthalten, die der Benutzer dir nicht gegeben hat.

Was du baust, in einem Absatz

Eine Engine plus N Geschäftsordner. Die Engine ist engine/app (Next.js App Router, React, TypeScript strict, Tailwind v4, pnpm), die vertrauenswürdigen Skripte, die sie ausführt, und die CLI-Tools in engine/tools. Jedes Unternehmen ist ein Mandant: tenants/<id>/, der sein Manifest, sein Brand-Kit, seine Ideen und Inhalte, seinen Speicher, seine Skills und seine eigenen Konto-Schlüssel enthält. Jede API-Route löst genau einen Mandanten auf und liest oder schreibt nur innerhalb seines Ordners. Das Dateisystem ist die Datenbank: Es gibt keine DB und kein ORM. KI-Arbeit wird vom CLI des eigenen Coding-Agenten des Benutzers erledigt (normalerweise claude), der kopflos mit cwd auf den Mandantenordner gesetzt wird, ohne Shell und mit Inline-Deny-Regeln, die ihn innerhalb dieses Ordners halten. Der Agent schreibt nur Wörter und Code. Die Engine erledigt alles, was ausgeführt wird: Gerüstbau, Export, Rendering und Veröffentlichung. Eine Einzelmandanten-Installation ist dieselbe Engine mit genau einem Mandantenordner. Es gibt keinen separaten „Ein-Marken-Codepfad".


Die goldene Regel: INTERVIEW ZUERST, BAUEN ZWEITENS

Schreibe keine Datei, bis das Interview abgeschlossen ist und der Benutzer die Zusammenfassung bestätigt hat. Der Wert des Systems liegt darin, dass es seines ist. Ein generischer Klon ist ein fehlgeschlagener Bau.

  • Frage in der Sprache des Benutzers, eine Gruppe von Fragen pro Zug, mit einem sinnvollen Standardvorschlag für jede Frage, damit der Benutzer mit „ja" antworten oder anpassen kann.
  • Der Benutzer kann zu jeder Frage „später" sagen oder „für den Rest die Standardeinstellungen verwenden". Notiere einen „später"-Punkt als ausstehend und baue den Teil, den er blockiert, in seinem deaktivierten Zustand, mit einem sichtbaren Hinweis „noch nicht eingerichtet".
  • Frage niemals nach Geheimnissen im Chat. Teile dem Benutzer mit, welche Variable in welche Datei gehört, und lass ihn sie dort einfügen. Wenn er dennoch eine einfügt, lege sie in die richtige Datei, gib sie niemals zurück und fordere ihn auf, sie zu rotieren.
  • Beende mit einer kompakten Zusammenfassung und hole ein explizites Ja ein.

Die allererste Frage betrifft die Mandantenstruktur:

Wird dieses System ein Unternehmen (Einzelmandant) oder mehrere Unternehmen oder Kunden, jeweils vollständig isoliert (Mehrmandant) betreiben?

  • Einzelmandant. Eine Marke. Das Dashboard öffnet direkt darin.
  • Mehrmandant. Eine Agentur oder eine Person mit mehreren Marken. Jedes Unternehmen erhält seinen eigenen Ordner: sein eigenes Brand-Kit, Ideen, Inhalte, Speicher, Chat, Veröffentlichungskanäle und Schlüssel. Sein KI-Agent kann niemals die Dateien eines anderen Unternehmens lesen. Ein Auswähler unter / wechselt zwischen ihnen.

Beide verwenden dieselbe Engine, und Einzelmandant ist einfach ein Ordner. Ein später hinzugefügtes Unternehmen bedeutet das Hinzufügen eines Ordners; nichts muss migriert werden.

Der vollständige Fragenkatalog (Systemfragen einmal, dann unternehmensspezifische Fragen), die Standardeinstellungen und wie jede Antwort einer Datei zugeordnet wird, befinden sich in references/1-interview.md. Lies sie, bevor du etwas fragst.


Was als Code ausgeliefert wird (assets/)

Den größten Teil dieses Systems generierst du aus den Referenzen. Elf Dateien werden wörtlich kopiert, da jede einzelne Randfälle enthält, die in der Produktion gemessen wurden (oder eine Sicherheitsgrenze darstellt) und eine erneute Ableitung aus Prosa würde sie stillschweigend falsch machen. Kopiere sie unverändert und bearbeite dann nur die mit EDIT: markierten Stellen (Sätze in der Sprache des Eigentümers, Sprachdaten, die Liste der Veröffentlichungstools). Die Referenzen erklären, warum jede so funktioniert, wie sie es tut; das Asset ist wie.

AssetKopieren nachWas es ist
assets/tenant.mjsengine/app/src/lib/tenant.mjsMandantenerkennung, Manifest + unternehmensspezifische settings-Validierung, der Path-Traversal-Guard, mandantenspezifische Umgebungsvariablen (Kontoschlüssel werden niemals vererbt)
assets/agent-flags.mjsengine/app/src/lib/agent-flags.mjsDer einzige Ort, an dem die Agenteneinschränkung aufgebaut wird: Profile, Inline-Deny-Regeln, die Umgebungsvariable-Whitelists
assets/proxy.tsengine/app/src/proxy.tsDer Same-Origin-Guard vor jeder /api-Route (Loopback-Host, keine Cross-Site-Anfragen, nur JSON- oder Multipart-Bodies)
assets/export-project.mjsengine/app/scripts/export-project.mjsDer vertrauenswürdige HTML→PNG-Exporter mit einer Default-Deny-Anfrage-Firewall
assets/shapes.mjsengine/app/src/lib/shapes.mjsDie beiden Anti-Wiederholungs-Achsen, die Text-Dedup nicht sehen kann (Form und Lektion) + Starterformen pro Art
assets/ideas-core.mjsengine/app/src/lib/ideas-core.mjsDer Ideenspeicher: Validierung gegen das Kit, deterministisches Dedup, Quarantäne, atomare Schreibvorgänge, der Mutex
assets/extract-json.mjsengine/app/src/lib/extract-json.mjsDer eine tolerante JSON-Leser, den der Radar-Verifier und der Ingest gemeinsam nutzen
assets/radar-verify.mjsengine/app/src/lib/radar-verify.mjsDie Grundlagenprüfung des Radars: SSRF-geschützter Fetch, Seitendaten, Zitat-Shingles, Sprach-Gate, unbewiesene Zahlen
assets/proposals.mjsengine/app/src/lib/proposals.mjsDie nicht fälschbaren Veröffentlichungsvorschläge des Chats: gebunden an eine Nachricht, einmalige Verwendung, atomare Beanspruchung
assets/new-tenant.mjsengine/tools/new-tenant.mjsErstellt einen gültigen, leeren, gesperrten Mandantenordner, alles oder nichts; --from erstellt eine verworfene Testkopie
assets/sync-tenant.mjsengine/tools/sync-tenant.mjsWendet die Skills und Einstellungen der Engine auf bestehende Mandanten erneut an (ausführen, nachdem eines von beiden bearbeitet wurde)

ideas-core.mjs importiert ./strategy-core.mjs, das du aus Referenz 4 §3 schreibst. Alles andere, was die Assets importieren, ist ein weiteres Asset.


Bau-Reihenfolge

Arbeite von oben nach unten. Lies vor jeder Stufe deren Referenz. Bevor du fortfährst, führe den Kontrollpunkt dieser Referenz aus. Eine Stufe, die „erledigt aussieht", aber ihren Kontrollpunkt nicht besteht, bricht etwas drei Stufen später an einer völlig anderen Stelle. Nach jeder Stufe teilst du dem Benutzer in einer Zeile mit, was du getan hast.

#StufeReferenzImmer?
0Maschine prüfen, Interview führen, Zusammenfassung bestätigen lassen1-interview.mdja
1Engine-Gerüst: Repository-Layout, Next-Bootstrap, ALLE Assets kopieren, Kern der Mandantenverwaltung, new-tenant, die Mandantenordner2-architecture-and-tenancy.mdja
2Sicherheit: Agenteneinschränkung, Spawn-Helfer, Proxy-Guard, Umgebungsisolierung, verify-tenants; dann sync-tenant --all3-security-and-agents.mdja
3Brand-Kit (Schema, Renderer, Interview, Research-Entwurf, Genehmigung) und der Ideenspeicher (+ Form- und Lektionsachsen)4-brand-kit-and-ideas.mdja
4Dashboard-Shell + Design-System: Auswähler, Mandanten-Shell, Startseite, Strategie, Ideen, Einstellungen, Token, RTL, Telefon-Layout5-dashboard-and-design.mdja
5Produktion: Generierungs-Jobs, Gerüst, vertrauenswürdiger Export, «Bearbeiten», Builder-Skills, Produktbibliothek, die Ansichten Produzieren/Galerie/Skripte; dann sync-tenant --all6-production-and-export.mdja (Bibliothek optional)
6Medien-Engines: KI-Bildbeiträge, KI-Video, browserbasiertes Video, Remotion-Animationen7-media-engines.mdoptional, pro Engine
7Radar + Wettbewerber + Transkripte + Präzedenzindex + eigene Analysen + Community-Beitrag8-radar-competitors-and-analytics.mdRadar ja; der Rest optional
8Chat-Assistent: gestreamte Runden, Speicher, die Aktionen des Agenten, Interview-Modus9-assistant-and-memory.mddringend empfohlen
9Kalender, Veröffentlichung (vom Eigentümer bestätigt), Wachstumsschleife10-publishing-calendar-and-growth.mdKalender ja; Veröffentlichung optional
10CRM + Partner (Dienstleistungsunternehmen)11-crm-and-partners.mdoptional
11Der Wissensspeicher des Eigentümers („Gehirn") + 3D-Graph12-brain.mdoptional
12Routing-Maps, CLAUDE.md / AGENTS.md für die Engine, jeden Mandanten und den Speicher13-routing-maps-and-agents-md.mdja
13Verifizierung: die vollständige Checkliste, dann die Übergabe14-verification.mdja

Baue nur die optionalen Stufen, die das Interview aktiviert hat. Ein Modul, das ausgeschaltet ist, ist auf dem Server ausgeschaltet (seine Routen geben für diesen Mandanten 404 zurück), nicht nur in der Seitenleiste versteckt. Jede Ansicht wird in der Stufe gebaut, die ihre Route baut (Referenz 5 §4 listet auf, welche); die Shell behandelt eine 404 von einer Route, die ausgeschaltet oder noch nicht gebaut ist, als „leer", niemals als Fehler.

Stufe 0: Prüfen, nicht annehmen

Teste jeden dieser Punkte einzeln. Sie sind unabhängig:

  1. Node ≥ 20 und pnpm (oder der vom Benutzer gewählte Paketmanager). Wenn Node fehlt, bitte den Benutzer, es zu installieren (nichts läuft hier ohne Node). Wenn Node funktioniert, aber die Next-App nicht installiert werden kann, verwende den Lite-Modus (unten).
  2. Symlinks. Erstelle einen in einem temporären Verzeichnis (ln -s / fs.symlinkSync). Unter Windows ohne Entwicklermodus oder Adminrechte schlägt dies fehl: new-tenant.mjs schreibt dann AGENTS.md als generierte Kopie und verlinkt node_modules mit einem Directory-Junction, und verify-tenants akzeptiert beides. Empfehle WSL, wenn verfügbar; es verhält sich wie Linux.
  3. Das Runtime-Agent-CLI. Kann ein Node-Prozess es kopflos starten (claude --print-Stil) und ist es angemeldet? Unterstützt es eine geschlossene Tool-Liste, Inline-Einstellungen mit Deny-Regeln und einen nicht interaktiven Berechtigungsmodus? Die Einschränkungsschicht ist für das claude-CLI geschrieben. Lies für jedes andere CLI „Anpassung an ein anderes Agent-CLI" in Referenz 3. Wenn der Agent nicht eingeschränkt werden kann, muss die Generierung für ein Mehrmandantensystem auf Prompt-Handoff heruntergestuft werden, da ein uneingeschränkter Agent jedes Unternehmen lesen kann.
  4. Optionale Tools, nur wenn das Interview das Modul aktiviert hat, das sie benötigt: ffmpeg, yt-dlp, das codex-CLI, Google Chrome.
  5. Playwright Chromium wird im Kontrollpunkt von Stufe 1 geprüft, nachdem das Bootstrap es installiert hat. Wenn es nicht installiert werden kann, verwende den HTML-only-Export.

Degradierungsmatrix (niemals zu einem Ja/Nein zusammenfassen)

  • Voll. Node, Playwright und ein einschränkbares Agent-CLI: alles wie spezifiziert.
  • HTML-only-Export. Playwright kann nicht installiert werden: Inhalte werden als HTML geschrieben und als HTML in der Vorschau angezeigt.
  • Prompt-Handoff-Generierung. Der Agent kann nicht kopflos gestartet werden oder kann nicht eingeschränkt werden: Generate, Radar und Edit schreiben den verfassten Prompt in <piece>/PROMPT.md und zeigen ihn an; der Benutzer führt seinen Agenten darauf aus und drückt dann „Ich habe es ausgeführt, aktualisieren". Jeder andere Teil des Dashboards funktioniert normal.
  • Lite-Modus. Node funktioniert, aber die Next-App kann nicht installiert werden: Baue die Mandantenordner, die null-Abhängigkeits-Kernbibliotheken (tenant.mjs, strategy-core.mjs, strategy-approve.mjs, ideas-core.mjs, shapes.mjs) und deren CLI-Tools: new-tenant, strategy-block, approve-kit (druckt den sha256 des Entwurfs, genehmigt dann genau diese Bytes) und ideas (auflisten / hinzufügen / genehmigen / ablehnen), alle in Referenz 4 §12 spezifiziert. Markengenehmigung und der Ideenspeicher funktionieren dann vom Terminal aus. Teile dem Benutzer mit, welche Teile app-basiert und welche dateibasiert sind.

Fertigstellungsdefinition

Du bist erst fertig, wenn die Checkliste von Referenz 14 bestanden ist: Typprüfung, Lint, Build, Unit-Tests, verify-tenants (mit seinen echten CLI-Kanarienvögeln), verify-publishing-safety wenn Veröffentlichung existiert, eine echte Generierung aus einer genehmigten Idee und Screenshots der wichtigsten Bildschirme. Berichte ehrlich, welche Punkte bestanden wurden. Melde niemals einen Build als fertig, während ein fehlgeschlagener Schritt unerwähnt bleibt.


Einzelmandant vs. Mehrmandant: Was sich tatsächlich ändert

AspektMehrmandantEinzelmandant
Ordnerstrukturtenants/<id>/ × N (oft der Arbeitsbereich der Agentur selbst + einer pro Kunde)tenants/<id>/ × 1 (dieselbe Struktur, sodass das Hinzufügen eines zweiten Unternehmens später nichts kostet)
/Auswähler: eine Karte pro Unternehmen (+ die Speicherkarte)Leitet zu /<only-id> weiter, wenn genau ein gültiger Mandant existiert
KopfzeileArbeitsbereichswechslerNur Unternehmensname, kein Dropdown
Agenteneinschränkung, Deny-Regeln, keine ShellErforderlichImmer noch erforderlich: Es hält den Agenten vom Engine-Quellcode, den Geheimnissen im Repository-Stamm und den Einstellungen fern
KontoschlüsselEigene .env.local jedes MandantenImmer noch die .env.local des Mandanten, nie die Engine-Umgebung, sodass ein zweites Unternehmen sie niemals erben kann
CLI-Tools--tenant <id> erforderlich, kein StandardImmer noch erforderlich (ein Shell-Alias ist in Ordnung)
KanarienvögelEchter Mandant = Opfer, Wegwerf-zz-canary = AngreiferGleich: Der Verifizierer erstellt seinen eigenen Angreifer

In der Benutzeroberfläche wird ein Mandant als „Arbeitsbereich" (in der Sprache des Benutzers) bezeichnet, niemals als „Mandant".


Nicht verhandelbare Punkte

Trage jeden dieser Punkte in das über, was du generierst. Jeder hat seinen Grund, denn eine Regel ohne Grund wird stillschweigend „vereinfacht".

  • ⭐ Nur Personalisierung. Jeder Wert stammt aus dem Interview. Belasse niemals einen Wert aus einem Beispiel, aus diesem Skill oder aus einem anderen Unternehmen in Code-Standards, Prompts oder Vorlagen. Ein Standardwert im Code brandmarkt stillschweigend jeden Mandanten, dessen Kit dieses Feld auslässt. Unternehmensspezifische Zahlen (Aktualität, Schwellenwerte, Währung, Kreditlimits, die Veröffentlichungssprache) leben in tenant.json settings; die einzigen Standards im Code sind die neutralen operativen Werte, die das Interview vorschlägt (DEFAULT_SETTINGS), und alles, wonach der Eigentümer nicht gefragt wurde, bleibt ungesetzt, niemals geraten.
  • ⭐ Kein Standardmandant, nirgendwo. Routen, CLI-Tools und der Cron müssen einen Mandanten benennen. Ein vergessener Mandant muss laut scheitern; die Alternative ist das stille Lesen oder Schreiben der Daten eines anderen Unternehmens.
  • ⭐ Kein erzeugter Agent erhält jemals eine Shell. Ein Kindprozess wie node läuft mit dem vollständigen Dateisystemzugriff des Operators, und kein CLI-Flag schränkt ihn ein. Dies wurde gemessen: Ein Mandanten-Agent mit einer Shell las die Dateien eines anderen Mandanten. Deshalb erstellt die Route das Gerüst vor dem Start und führt den vertrauenswürdigen Exporter oder Renderer danach aus. Der Agent schreibt Wörter und Code; die Engine führt aus. Gib niemals --dangerously-skip-permission oder ähnliche Flags aus, die erforderlich sind, um Werkzeuge wie npx, rm, cat oder ls zu deaktivieren – stattdessen verwende die geschlossene Tool-Liste des Agenten-CLI mit Inline-Deny-Regeln. Wenn das CLI dies nicht unterstützt, degrade auf Prompt-Handoff (siehe Referenz 3).

[Die restlichen nicht verhandelbaren Punkte und der gesamte Skill werden in ähnlicher Weise fortgesetzt, aber aus Platzgründen gekürzt.]

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

Verwandte Skills