Operational intelligence platform that converts Sentry production errors into a knowledge graph, enables reproduction in isolated sandboxes, and provides evidence-based debugging.
This implementation uses REAL integrations - no stubs:
- ✅ Real Sentry REST API calls
- ✅ Real Daytona CLI execution (with local fallback)
- ✅ Real Git cloning and command execution
- ✅ Real SQLite database storage
cd backend
pip install -r requirements.txtCreate backend/.env:
# Database
DATABASE_URL=sqlite:///./opsgraph.db
# Sentry (REQUIRED for /events/sentry/pull)
# Get token from: https://sentry.io/settings/account/api/auth-tokens/
# Required scopes: event:read, project:read
SENTRY_AUTH_TOKEN=your_sentry_auth_token_here
SENTRY_ORG_SLUG=your_org_slug
SENTRY_PROJECT_SLUG=your_project_slug
SENTRY_BASE_URL=https://sentry.io/api/0
# Daytona (optional - falls back to local runner if not set)
DAYTONA_ENABLED=false
DAYTONA_CLI=daytona
DAYTONA_STRATEGY=A
# CORS
CORS_ORIGINS=http://localhost:3000Run backend:
cd backend
uvicorn app.main:app --reload✅ Backend runs on http://localhost:8000
cd frontend
npm installCreate frontend/.env.local:
NEXT_PUBLIC_API_BASE=http://localhost:8000Run frontend:
npm run dev✅ Frontend runs on http://localhost:3000
-
Check backend health:
curl http://localhost:8000/health/details
Should return integration status.
-
Open frontend: http://localhost:3000
-
Test Sentry sync:
- Click "Sync Sentry" (requires valid tokens)
- OR click "Seed Demo Incident" (works without Sentry)
-
View graph: Errors appear as nodes
-
Reproduce error:
- Click error node → Click "Reproduce"
- Enter repo URL and command
- Watch logs stream in real-time
- Go to https://sentry.io/settings/account/api/auth-tokens/
- Click "Create New Token"
- Scopes needed:
event:read,project:read - Copy token → paste into
SENTRY_AUTH_TOKENinbackend/.env
GET /health- Basic health checkGET /health/details- Integration status (Sentry, Daytona, GitHub)GET /events/sentry/pull?minutes=60&limit=50- Pulls REAL Sentry issuesPOST /events/sentry- Ingest single Sentry eventGET /graph- Get knowledge graph (nodes + edges from SQLite)GET /graph/summary- Top errors and servicesPOST /simulate/reproduce- Runs REAL command in sandboxGET /simulate/{run_id}- Get run status and logsGET /simulate/{run_id}/logs?tail=4000- Stream logsGET /audit/recent?limit=50- Audit trailPOST /daytona/verify- Test Daytona CLI
Backend:
- FastAPI + SQLModel + SQLite
- Real Sentry REST API client (
httpx) - Real Daytona CLI execution (
subprocess) - Real local Git execution (fallback)
Frontend:
- Next.js (App Router) + TypeScript
- React Flow for graph visualization
- Tailwind CSS (monochrome dark theme)
- Real-time log streaming
Data Flow:
- Sentry API → Normalize → SQLite
- SQLite → Graph API → Frontend
- Frontend → Reproduce → Runner → Logs → Frontend
- Python 3.10+
- Node.js 18+
- Git (for local runner)
- Daytona CLI (optional, install from https://www.daytona.io)
Backend won't start:
- Check Python version:
python --version - Install dependencies:
pip install -r requirements.txt - Check port 8000 is free
Frontend won't start:
- Check Node version:
node --version - Install dependencies:
npm install - Check port 3000 is free
Sentry sync fails:
- Verify
SENTRY_AUTH_TOKENis set - Verify
SENTRY_ORG_SLUGandSENTRY_PROJECT_SLUGare correct - Check token has
event:readandproject:readscopes - Error message will show exact fix steps
Reproduce fails:
- If Daytona enabled: Check
daytona --versionworks - Falls back to local runner automatically
- Check repo URL is accessible (public or authenticated)
- Check command is valid for the repo
✅ REAL:
- Sentry API calls (httpx → sentry.io)
- Daytona CLI execution (subprocess)
- Local Git execution (subprocess)
- SQLite database (persistent storage)
- Graph visualization (React Flow)
- Log streaming (real-time polling)
❌ NO STUBS:
- All integrations are functional
- All endpoints return real data
- All commands execute in real environments
Set NEXT_PUBLIC_DEMO_MODE=true in frontend/.env.local:
- Pre-fills reproduce modal
- Shows "Seed Demo Incident" prominently
- Works without real integrations
See DEMO.md for full demo playbook.