| name | mana-hub-install-helper |
| description | Guides Mana Hub Core users through a fresh install, Supabase setup, bridge/connector configuration, agent setup, doctor checks, and safe customization. Use when setting up Mana Hub, connecting Supabase, configuring agents or bridges, running fresh-install checks, or adapting the starter to a user's own use case. |
Mana Hub Install Helper
Grundregel
Fuehre Nutzer durch ein blankes Mana-Hub-Core-Setup. Schreibe niemals Secrets in Git-getrackte Dateien. Private Daten, echte Knowledge Base, echte Agent-Pfade und Host-Anpassungen gehoeren in .env.local, user.config/, workspace/ oder eigene nicht-Core-Verzeichnisse.
Setup-Ablauf
-
Pre-Course Setup Contract zuerst. Lies PRE-COURSE-SETUP.md im Repo-Root. Teil A (Minimum vor Lesson 3.1) ist bei echtem Setup vollstaendig abzuarbeiten. Teil B/C beschreibt Kurs-Live-Schritte (~/agents kopieren, tmux, File-Drop) — die nicht fuer den Nutzer vorwegnehmen, wenn er diese Lessons noch aufnehmen oder mit Zuschauern nachbauen will (siehe docs/course-lesson-boundaries.md). Die Datei traegt <!-- MUST_READ_FOR_AGENTS --> und hat Vorrang vor diesem Skill.
-
Klaere den Modus:
- Demo: ohne echtes Supabase, nur UI und Beispielstruktur pruefen.
- Fresh Install: neues Supabase-Projekt, Migrationen, Auth, Storage und lokale Agents einrichten.
- Existing Host: vorhandenes Projekt anbinden, ohne User Space zu ueberschreiben.
-
Frage gezielt nach:
- Supabase Project URL.
- Supabase anon key.
- Supabase service role key nur fuer
.env.local.
- Gewuenschte Agent-Namen und Rollen.
- Lokaler Agents-Pfad oder Bridge/Runner-Modus.
- Ob
tmux, Cron/LaunchAgent oder ein eigener Connector genutzt wird.
-
Leite die Dateien an:
.env.example nach .env.local kopieren und lokal ausfuellen.
user.config/agents.example.json als Vorlage fuer eigene Agents nutzen.
user.config/connectors.example.json fuer Bridge/Runner-Details nutzen.
workspace/knowledge.example/ als neutrale Struktur kopieren, aber eigene Inhalte nicht in Core-Dateien speichern.
-
Fuehre die Pruefung:
npm install
- Supabase Migrationen aus
supabase/migrations/ in alphabetischer Reihenfolge anwenden.
npm run doctor (laedt .env.local automatisch; harte Checks + Advisory fuer tmux/LaunchAgent/s. docs/course-lesson-boundaries.md)
npm run lint
npm run typecheck
- Dashboard starten und Smoke Tests aus
docs/fresh-install-checklist.md ausfuehren.
-
Bridge persistent halten (macOS):
- Erklaere: die Bridge ist ein dauerhafter Prozess. In Cursor-Terminal stirbt sie beim Schliessen. Fuer echte Nutzung muss sie als LaunchAgent laufen.
- Frage den Nutzer: "Soll ich die Bridge als macOS LaunchAgent installieren?"
- Antwort ja:
cd bridge && npm install && npm run launchd:install. Verifiziere mit npm run launchd:status (state = running).
- Antwort nein: weise darauf hin, dass die Bridge dann nur laeuft solange das Cursor-Terminal offen ist.
- Default-Mode der Bridge ist
inline (Bridge ruft LLM-API direkt). Fuer das Kurs-Setup ab Modul 3 wird BRIDGE_MODE=file_drop benoetigt — frage, ob der Nutzer den Kurs nachbauen will, und setze dann diese Variable plus BRIDGE_AGENTS_DIR=$HOME/agents in bridge/.env.
- Siehe
docs/bridge-persistence.md und docs/bridge-modes.md.
-
Agent-Boilerplate-Verzeichnis vorbereiten (Kurs ab Lesson 3.1):
- Nur ausfuehren, wenn der Nutzer kein Live-Dreh von Lesson 3.1 plant oder ausdruecklich Hilfe beim Kopieren will.
mkdir -p ~/agents
- Frage den Nutzer nach dem Namen seines ersten Agents (Default-Beispiel im Kurs:
orchestrator).
cp -R templates/agent-boilerplate ~/agents/<agent-name>
- Erklaere: die Files in
~/agents/<agent-name>/ sind User Space — der Nutzer fuellt sie in den Lessons 3.2-3.7 selbst.
- Wenn
BRIDGE_MODE=file_drop aktiv ist, plus BRIDGE_AGENT_NAMES in bridge/.env so anpassen, dass es mit dem Agent-Namen matched.
- Optional: LaunchAgent fuer den Agent installieren mit
bash templates/launchagents/install-agent.sh <agent-name> (passiert im Kurs in Lesson 3.5).
-
Cron-Briefings einrichten (Kurs Lesson 4.6, optional):
- Nur ausfuehren, wenn der Nutzer fuer einen Agent eine geplante Routine (z.B. taegliches Morgenbriefing) haben will und das nicht selber live nachbauen moechte.
- Pflichtlektuere zuerst:
docs/cron-and-briefings.md (End-to-End-Flow, Frontmatter-Kontrakt, Troubleshooting).
- Schritt 1 — Snippet in CLAUDE.md des Agents ziehen: drei Bloecke aus
templates/agent-boilerplate/snippets/briefing-routine.md in ~/agents/<agent-name>/CLAUDE.md einfuegen (Block A als neue §5.8, Block B in §5.2, Block C in §5.3). Jedes <AGENT_NAME> durch den lowercase-Agent-Namen ersetzen.
- Schritt 2 — Cron-Job anlegen:
npm run cron:create -- --agent <name> --id <name>-morning-briefing --name "Morning Briefing" --schedule "07:30" --output-kind briefing --prompt "<task>". --schedule Minute auf Vielfaches von 5 setzen, sonst BRIDGE_CRON_TICK_INTERVAL_MS=60000 in bridge/.env setzen.
- Schritt 3 — Verifizieren:
tmux send-keys -t <name> "process_inbox" Enter, Bridge-Log auf [file-drop] dispatched reply pruefen, Dashboard → Briefings-Tab pruefen.
- Wenn das Briefing im Chat statt im Briefings-Tab landet: der Agent hat einen Pflicht-Frontmatter-Wert (
output_kind, source, job_id, job_name, briefing_title, category, urgency) vergessen. Quick-Check: outbox/processed/reply-*.md mit dem Beispiel im Snippet vergleichen.
-
Risk-Approval einrichten (Kurs Lesson 4.7, optional):
- Nur ausfuehren, wenn der Nutzer Aktionen seines Agents wirklich abnehmen will (Geld, externe Systeme, Loeschen, Vertraege, Posten in seinem Namen). Reine Lese-Agents brauchen das nicht.
- Pflichtlektuere zuerst:
docs/risk-approval.md (End-to-End-Flow, action_type-Naming, Always-Policy-Lerneffekt, Troubleshooting).
- Schritt 1 — Migration applizieren:
supabase/migrations/20260509_approval_policies_learning.sql im Supabase SQL Editor ausfuehren. Fuegt use_count, last_used_at, agent_name, source, decided_by und einen Lookup-Index zu approval_policies hinzu.
- Schritt 2 — Snippet in CLAUDE.md des Agents ziehen: zwei Bloecke aus
templates/agent-boilerplate/snippets/risk-approval-routine.md in ~/agents/<agent-name>/CLAUDE.md einfuegen (Block A als neue §4.5, Block B in §5.2). Jedes <AGENT_NAME> und <USER_NAME> ersetzen. Die "Welche Aktionen sind sensibel"-Liste an die Agent-Domaene anpassen.
- Schritt 3 — Bridge restart, damit die neuen Code-Pfade aktiv sind (
type: approval_request in Outbox-Reply wird erkannt, kind: risk_approval_decision Felder werden ins Inbox-Frontmatter promotet).
- Schritt 4 — Verifizieren: dem Agent eine sensible Aufgabe schicken (z.B. "verbinde mein Bankkonto"). Pruefen: (a)
outbox/processed/reply-*.md enthaelt type: approval_request, (b) Bridge-Log: approval ... pending — visible in Risk-Approval tab, (c) Dashboard /dashboard/agents/approvals zeigt eine Karte mit drei Knoepfen, (d) "Einmalig freigeben" → Agent fuehrt aus, (e) "Immer erlauben" beim naechsten Versuch → Always-Policy erscheint im unteren Bereich, (f) dritter Versuch → keine Karte, auto-approved.
- Wenn die Karte nicht erscheint: Migration nicht appliziert, oder Bridge nicht neugestartet. Wenn der Agent statt eines
type: approval_request-Replies eine normale Reply schreibt: das §4.5-Snippet fehlt oder <USER_NAME>/<AGENT_NAME> wurden nicht ersetzt.
Was Core ist
Core-Dateien sind updatebar: src/, supabase/migrations/, docs/, .cursor/skills/, scripts/, .env.example, README.md, UPGRADE.md, SECURITY.md, MIGRATIONS.md.
Was User Space ist
User Space ist nutzerspezifisch und darf bei Updates nicht ueberschrieben werden: .env.local, user.config/, workspace/, eigene Agent-Verzeichnisse, eigene Bridge-Configs, private Knowledge Base, lokale Logs und nicht-getrackte Secrets.
Sicherheitsregeln
- Service Role Key nie in Browser-Code, README, Screenshots oder Git schreiben.
- Keine echten Kundendaten, privaten Reports oder persoenlichen Prompts in Demo-Dateien eintragen.
- Bei Unsicherheit erst
npm run doctor und die Fresh-Install-Checkliste ausfuehren.
- Gefaehrliche Agent-Aktionen ueber Risk Approval oder einen Host-Connector absichern.
Weitere Referenz
Lies bei Detailfragen reference.md. Nutze die dortigen Checklisten fuer Supabase, Bridge, Agents, Memory, Knowledge Base, MCP, Cron und Permissions.