Transform synchronous Google Meet sessions into focused, decision-only workshops by enforcing AI-driven asynchronous pre-work.
S.Y.N.C. Agent collects participant input before meetings via a Google Chat bot, runs an AI pipeline to extract insights, and presents the conductor with an intelligence dashboard showing alignment heatmaps, roadblock matrices, and stakeholder network graphs — so the actual meeting time is spent making decisions, not gathering context.
Three-service monorepo (npm workspaces + Turborepo):
| Service | Stack | Port |
|---|---|---|
| AI Core | Python 3.11, FastAPI, LangGraph, Neo4j, GLM-5.1 | 8000 |
| Conductor Hub | Next.js 16, React 19, Tailwind v4 | 3000 |
| Participant Hub | Node.js, TypeScript, Google Chat webhook | 3001 |
Data layer: Neo4j AuraDB (graph database), Google Drive (pre-work documents), in-memory cache.
Four LangGraph agents run sequentially:
- Knowledge Extractor — reads pre-work files from Drive, extracts entities and relationships, writes to Neo4j
- Alignment & Conflict Analyst — traverses the graph to find consensus clusters and contradictions
- Dashboard Synthesizer — generates heatmap, roadblock matrix, and network graph payloads
- Live Meeting Copilot — answers in-meeting questions with full context, auto-triggers recalibration when needed
Recalibration modes: Full (1→2→3), Conflict (2→3), Visual (3 only).
- Docker & Docker Compose
- A Google Cloud service account with Workspace domain-wide delegation
- A Neo4j AuraDB instance (free tier works)
- An Anthropic API key (or compatible endpoint)
# Clone the repo
git clone https://github.com/Stirrup-Communications/sync-ai-workflow.git
cd sync-ai-workflow
# Configure environment
cp .env.example .env
# Edit .env — fill in at minimum:
# SYNC_GLM_API_KEY, SYNC_NEO4J_URI, SYNC_NEO4J_USER, SYNC_NEO4J_PASSWORD
# GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, NEXTAUTH_SECRET
# Place your Google service account key
cp /path/to/service-account.json ./service-account.json
# Build and run
docker compose build
docker compose upThe Conductor Hub will be available at http://localhost:3000.
Key variables (see .env.example for the full list):
| Variable | Purpose |
|---|---|
SYNC_GLM_API_KEY |
LLM API key |
SYNC_NEO4J_URI |
Neo4j connection URI |
SYNC_NEO4J_USER / SYNC_NEO4J_PASSWORD |
Neo4j credentials |
SYNC_API_KEY |
API key between Conductor Hub and AI Core (empty = disabled) |
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET |
Google OAuth for Conductor Hub login |
NEXTAUTH_SECRET |
NextAuth session encryption key |
SYNC_ADMIN_EMAILS |
Comma-separated emails allowed to access Conductor Hub |
GOOGLE_CHAT_WEBHOOK_TOKEN |
Bearer token for Participant Hub webhook auth (empty = disabled) |
| Method | Path | Description |
|---|---|---|
POST |
/events |
Create event |
GET |
/events |
List events (filtered by user) |
GET |
/events/{id} |
Event status |
GET |
/events/{id}/participants |
Participant list |
POST |
/events/{id}/trigger-synthesis |
Run agents 1→2→3 |
POST |
/events/{id}/recalibrate |
Recalibrate dashboard |
GET |
/events/{id}/dashboard |
Dashboard JSON |
POST |
/events/{id}/export |
Export meeting (google/json/markdown) |
POST |
/prework/submit |
Submit pre-work |
POST |
/prework/query |
Contextual Q&A |
POST |
/meeting/query |
In-meeting chat query |
WebSocket |
/ws |
Live dashboard updates |
GET |
/health |
Health check |
| Route | Description |
|---|---|
/ |
Meeting list dashboard |
/events/new |
Create event |
/events/{id} |
Pre-work status (progress, participants, auto-nudge) |
/events/{id}/dashboard |
Intelligence dashboard |
/events/{id}/live |
Live meeting console |
/events/{id}/export |
Post-meeting export |
/login |
Google OAuth sign-in |
| Method | Path | Description |
|---|---|---|
POST |
/webhook |
Google Chat event handler |
GET |
/health |
Health check |
- Users → Conductor Hub: Google OAuth via NextAuth v5.
SYNC_ADMIN_EMAILSgates access. - Conductor Hub → AI Core:
X-API-Keyheader (setSYNC_API_KEY; empty = disabled for dev). - Conductor Hub → AI Core:
X-User-Emailheader passes user identity for event ownership. - Google Chat → Participant Hub:
GOOGLE_CHAT_WEBHOOK_TOKENBearer token (empty = disabled for dev).
# AI Core (Python) — 39 tests
cd apps/ai-core && pytest
# Conductor Hub (Vitest) — 11 tests
cd apps/conductor-hub && npm test
# Participant Hub (Vitest) — 11 tests
cd apps/participant-hub && npm test
# All services via Turborepo
npm testFor hot-reload during development:
docker compose -f docker-compose.yml -f docker-compose.dev.yml up- Local: Docker Compose (current default)
- Cloud: GCP Cloud Run + Cloud Functions (configs in
infra/gcp/)
| File | Description |
|---|---|
PRD.md |
Product requirements |
DESIGN.md |
UI design system |
docs/GETTING-STARTED.md |
Credentials checklist and setup guide |
docs/AUDIT-2026-04-30.md |
Audit findings and status |
- Google Workspace integration requires domain-wide delegation to be configured
- Google Meet live transcription is stubbed (needs Meet API access)
- No real WebSocket testing with actual Meet data
- LLM-generated dashboard quality is non-deterministic
Proprietary — Stirrup Communications.