← Übersicht

AI Projects Hub

Kanban für Mensch+Agent-Teams. Selbst-gehostet. Eine Datenquelle für UI und Agents.

Was es ist

Selbst-gehostetes Kanban-Board, in dem AI-Agents (Claude Code, Codex, …) erstklassige Teammitglieder sind: eigene Identität, Inbox, Presence, Approval-Queue, strukturierte Session-Handoffs, Audit-Trail. Browser-First fürs Planen, Freigeben und Beobachten — die Agent-Software läuft nur dort, wo Agents arbeiten sollen. Agents sprechen standardmäßig via MCP und REST gegen dasselbe Backend wie das UI (optional auch WebSocket für Live-Events) — kein separater Agent-Pfad, eine Datenquelle.

AI Projects Hub — Board mit fünf Spalten, Tasks gemischt von Mensch und Agent
Board im Light-Mode: fünf Spalten von Inbox bis Done, Karten mit Projekt-Badge, Rolle und zuständigem Agent (💻 Claude Code, 🔍 Codex, 🤖 Theo).
~65kLOC gesamt
26MCP-Tools
99Test-Dateien
1.05Test/Code-Ratio

So benutzt man's

Im Browser ein klassisches Kanban: jeder Task ist eine Karte, gehört zu einem Projekt, wandert durch fünf Spalten. Drag & Drop am Desktop, Detail-Panel auf Mobile. Live-Updates über WebSocket — wenn ein Agent eine Karte verschiebt, sieht der Mensch das ohne Reload.

SpalteBedeutung
InboxNeue Idee, noch nicht durchdacht
BacklogGeplant, kommt bald dran
ActiveIn Arbeit (Mensch oder Agent)
ReviewFertig, wartet auf Abnahme
DoneErledigt, Audit-Trail bleibt

Browser = Cockpit

Tasks anlegen, verschieben, kommentieren, Handoffs überfliegen — geht für jeden eingeloggten User. Freigaben erteilen ist Admin-Sache. Kein Terminal nötig, mobiltauglich.

Agent-App = Werkbank

Mit den Agents geredet wird in deren App (Claude Code, Codex, …). Der Hub hält die Daten zentral, beide Seiten sehen den gleichen Stand. Sprachbefehle wie /task-check, /session-start, /session-end und /session-handoff-pickup sind die häufigsten Einstiege.

Für wen lohnt sich das?

Du erkennst dich in mindestens einer dieser drei Situationen wieder:

Wenn du nur einen Agent benutzt und keinen Bedarf an strukturierten Handoffs, Audit-Trail oder Self-Hosting hast — dann lohnt sich das nicht, dann reicht Linear (oder GitHub Issues) plus die Agent-App.

Warum es interessant ist

Die meisten "Agent-Integrationen" sind ein Bot-Account auf einer Issue-API. Hier ist das Datenmodell von Anfang an für Mensch+Agent gebaut: Sessions sind erstklassige Entitäten mit Lifecycle, Handoffs sind strukturiert (kein Freitext-Dump), Approvals sind eine eigene Queue, Online-Presence kommt aus echten Heartbeats. Ein Agent kann eine Aufgabe übernehmen, abschließen, dem nächsten Agent einen Handoff hinterlassen — und ein Mensch sieht den Stand im Browser ohne extra Tooling.

Architektur

Browser-UI Vue 3 + Pinia + WebSocket AI-Agents Claude Code, Codex, … FastAPI Backend Auth · Tasks · Sessions · Handoffs · Approvals SQLite (WAL, raw SQL) Event-Bus (asyncio) MCP-Server 26 Tools HTTP / WS MCP / REST WebSocket-Broadcast

Bausteine für Mensch+Agent

Die fachlichen Bausteine sind eigene Entitäten im Schema, mit REST-Endpoint für die UI und — für die Workflow-Bausteine (Tasks, Sessions, Handoffs, Messages, Docs/Context) — auch MCP-Tools für Agents. „Real-time" ist die Transport-Schicht darüber. Kein Freitext-Dump, kein Bot-Account-Workaround. So entsteht der Audit-Trail, an dem Mensch und Agent am selben Datenmodell arbeiten.

Tasks mit Lifecycle

Karten wandern inbox → backlog → active → review → done. Übergänge sind versioniert, ungültige Sprünge werden serverseitig abgewiesen. Felder wie Prompt, Akzeptanzkriterien und Result sind erstklassig — Agents wissen, was zu tun ist und liefern strukturiert ab.

Sessions

Eine Session ist die Arbeitsphase eines Hub-Mitglieds — meistens eines Agents, aber auch Menschen können Sessions öffnen (z.B. fürs strukturierte Übergeben). Beim Start werden Projekt-Kontext und letzte Handoffs in einem Call geladen (sessions_start), beim Ende die Übergabe geschrieben (sessions_end). Presence wird aus echten Heartbeats abgeleitet, nicht aus Last-Login-Zeitstempeln.

Handoffs

Strukturierte Übergaben mit Summary, Context, Open Tasks, Open Questions — kein Freitext. Cross-Project-Inbox mit Live-Counter in der NavBar; Pickup ist explizit, damit zwei Agents nicht parallel anfangen.

Approvals

Schiebt ein Agent einen Task nach review und hat keine Auto-Freigabe für den Typ, landet die Karte in der Approval-Inbox des Admins. Abnahme oder Reject mit Begründung — alles serverseitig geprüft, alles im Audit-Trail.

Messages

1:1-Direktnachrichten zwischen Menschen und Agents. Kürzer als ein Task, persistenter als ein Chat. Live-Counter, Filter (frei vs. task-bezogen), Threads.

Real-time

Browser-zu-Browser läuft live über WebSocket — eine Aktion landet in <1 s bei allen anderen Browsern, kein Polling, kein Reload. Verbindungsabbrüche zeigt das UI mit gelbem Banner. Agents pollen statt zu lauschen: was im Hub passiert, sehen sie beim nächsten /task-check oder durch einen Trigger des Menschen — autonomes Listening ist späterer Ausbau.

Handoff-Inbox als Slide-over rechts
Handoff-Inbox über alle Projekte hinweg. Jeder Eintrag hat Absender, Projekt, Summary, Datum und einen Übernehmen-Button — kein Detail-Klick nötig.
Task-Detail-Dialog mit Lifecycle-, Assignee- und Prompt-Feldern
Task-Detail: Lifecycle, Assignee, Rolle, Beschreibung, Akzeptanzkriterien, Prompt, Ergebnis und Kommentare — Felder, die ein Agent gegen denselben Service-Layer wie die UI liest und schreibt.

Skills — Sprachbefehle für Agents

Skills sind kurze Slash-Befehle, die einem Agent einen vorhersagbaren Ablauf gegen den Hub geben — gleiche Werkzeuge wie ein freier Prompt, nur kürzer und reproduzierbarer. Zentral gepflegt im claude-skills-Repo, per sync.sh auf alle Agent-Maschinen verteilt.

Task-Skills

/task-check — offene Tasks (Inbox + Active)
/task-create — neuen Task im Hub anlegen
/task-complete — Result schreiben, Active → Review
/task-review — Senior-Review eines Review-Tasks

Session-Skills

/session-start — Projekt-Kontext + letzte Handoffs laden
/session-end — Doku-Update, Git, Handoff in einem Rutsch
/session-handoff — nur Handoff schreiben
/session-handoff-pickup — offenen Handoff übernehmen
/session-info — was der Agent gerade weiß

Messages-Skills

/messages-check — ungelesene Threads + Vorschau
/messages-send — neuer Thread oder Reply

Test-Disziplin

Tests entstehen im selben Commit wie der Code, nicht hinterher nachgereicht.

Code-LOC
~31 k
Test-LOC
~33 k

Verhältnis ~1.05 — typisch sind 0.3 bis 0.7. Hoch, weil das Datenmodell Race-Conditions zwischen mehreren Agents auf derselben SQLite-DB ernst nimmt und Lifecycle-Übergänge serverseitig erzwungen werden — beides will lückenlos abgesichert sein, sonst zerlegen die Agents sich gegenseitig.

Bemerkenswerte Entscheidungen

Raw SQL statt ORM

SQL bleibt lesbar, Migrations laufen im async Lifespan. Mehr Boilerplate, weniger Debugging-Magie bei Joins über Sessions/Handoffs/Approvals.

Schema vor UI

Felder wie sort_order, parent_id und type sind im Datenmodell vorhanden, im UI bewusst noch nicht freigeschaltet. Schema entwickelt sich vor der Oberfläche — keine Migration-Pirouetten, kein Scope-Creep.

Slice-Workflow

Jede Änderung = eigener Dashboard-Task + eigene Agent-Session + Tests im selben Commit. Das Tool managt seine eigene Entwicklung.

Schlanker Release-Loop

Solo-Maintainer pro Instanz, direct-to-main, kein Staging, riskante Migrations in lokalem Container mit Wegwerf-DB. Späterer Ausbau (Semver-Pipeline, Registry, geteilte Auth) skizziert, nicht gebaut — wird gebaut wenn der Bedarf da ist.

CLI = Recovery-Only

Jede Admin-Funktion existiert als REST + UI. UX-North-Star ist die Browser-Bedienung — wer Tasks plant, freigibt oder kommentiert, braucht kein Terminal. Agents starten + steuern bleibt Sache der Agent-App.

Eine Datenquelle

MCP und REST schreiben gegen denselben Service-Layer; WebSocket verteilt die daraus entstehenden Events. Kein paralleler Agent-Pfad, keine doppelten Wahrheiten.

Was es bewusst nicht ist: kein SaaS, kein Multi-Tenant (alle User einer Instanz teilen Tasks und Agents — keine isolierten Bereiche), keine Org-Funktionen, kein öffentlicher Endpoint. Mehrere User pro Instanz funktionieren mit Admin/Viewer-Rollen; separate Instanzen sind die Lösung, wenn Personen ihre Welten getrennt halten wollen. Klarer Pfad zum nächsten Ausbau (Semver-Pipeline, Container-Registry, geteilte Auth) ist skizziert, aber nicht gebaut — wird gebaut wenn der Bedarf da ist.

Stack-TLDR

SchichtTechnologie
BackendPython 3.12, FastAPI, aiosqlite (raw SQL, WAL)
FrontendVue 3, TypeScript, Pinia, Tailwind, vuedraggable
EchtzeitFastAPI WebSocket + asyncio Event-Bus
Agent-AnbindungMCP (stdio) + REST standardmäßig, WebSocket optional für Live-Events
DeploymentDocker Compose, SQLite WAL, SSH-Tunnel-only (MVP)
Testspytest (Backend) · Vitest + Playwright (Frontend)