Skip to content

tonypius/sync-ai-workflow

Repository files navigation

S.Y.N.C. Agent

Transform synchronous Google Meet sessions into focused, decision-only workshops by enforcing AI-driven asynchronous pre-work.

Overview

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.

Architecture

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.

AI Pipeline

Four LangGraph agents run sequentially:

  1. Knowledge Extractor — reads pre-work files from Drive, extracts entities and relationships, writes to Neo4j
  2. Alignment & Conflict Analyst — traverses the graph to find consensus clusters and contradictions
  3. Dashboard Synthesizer — generates heatmap, roadblock matrix, and network graph payloads
  4. 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).

Quick Start

Prerequisites

  • 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)

Setup

# 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 up

The Conductor Hub will be available at http://localhost:3000.

Environment Variables

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)

API Endpoints

AI Core (localhost:8000)

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

Conductor Hub (localhost:3000)

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

Participant Hub (localhost:3001)

Method Path Description
POST /webhook Google Chat event handler
GET /health Health check

Authentication

  • Users → Conductor Hub: Google OAuth via NextAuth v5. SYNC_ADMIN_EMAILS gates access.
  • Conductor Hub → AI Core: X-API-Key header (set SYNC_API_KEY; empty = disabled for dev).
  • Conductor Hub → AI Core: X-User-Email header passes user identity for event ownership.
  • Google Chat → Participant Hub: GOOGLE_CHAT_WEBHOOK_TOKEN Bearer token (empty = disabled for dev).

Testing

# 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 test

Development

For hot-reload during development:

docker compose -f docker-compose.yml -f docker-compose.dev.yml up

Deployment

  • Local: Docker Compose (current default)
  • Cloud: GCP Cloud Run + Cloud Functions (configs in infra/gcp/)

Documentation

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

Known Limitations

  • 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

License

Proprietary — Stirrup Communications.

About

Transform synchronous Google Meet sessions into focused, decision-only workshops by enforcing AI-driven asynchronous pre-work.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors