Srot-core is an AI-powered engineering intelligence system that turns meetings into code-aware, execution-ready developer tasks.
It bridges the gap between what is discussed in a meeting and what an engineer (or AI agent) needs to actually implement it.
| Feature | Note-Taker Apps | Srot Core |
|---|---|---|
| Context | Transcript only | Transcript + Codebase |
| Output | Summaries | Summaries + Execution-ready tasks |
| Accuracy | Generic / sometimes misleading | Grounded in actual code |
| Post-Meeting Work | Manual (create tickets, find code) | Automated (Jira + task files + CLI) |
Engineering teams lose significant time translating meeting discussions into actionable tickets, and those tickets rarely contain enough context for an engineer to start work immediately. srot-core solves this end to end:
- Streaming Intelligence: Real-time transcription with context resolution (handles noise, pronouns, mixed language).
- Context-Aware Extraction: Detects actionable items and avoids irrelevant chatter.
- Jira-Ready Outputs: Generates structured, non-duplicate tickets with proper context.
- Codebase Enrichment: Maps tasks to actual services, functions, entities using Neo4j + Qdrant.
- Dev-Ready Task Files: For every task, a structured markdown file is generated for use by engineers or AI coding agents.
Audio Stream (PCM 16kHz)
│
▼
Deepgram ASR
(Hindi support, interim results)
│
▼
Confidence & Rule Filter
(drops noise, confirms quality)
│
▼
Context Manager & Resolver
(tracks project/module, enriches text)
│
▼
LLM Trigger (Gemini)
(decides if a task is being discussed)
│
▼
Task Extraction & Jira State Builder
(shapes tasks with code context & domain packs)
│
▼
Hybrid Summary Generation
(LLM-corrected cumulative markdown)
│
▼
Dev Layer
(Structured task files for engineers/agents)
Srot-core indexes TypeScript/NestJS codebase into a hybrid knowledge store:
-
Neo4j:
- Nodes: Project, Service (Controller, Resolver, Entity, Module), GraphQLType, Interface, APIEndpoint, Function, Enum, EntityColumn, and DomainEntity.
- Relationships:
DEFINED_IN,TRIGGERS,USES,HANDLES,DEPENDS_ON,EXTENDS,IMPLEMENTS,HAS_COLUMN,REFERENCES.
-
Qdrant: A multi-vector store (Semantic + Name vectors) providing a high-fidelity memory of code intent and identity. All projects share a single collection with metadata-level isolation.
At task generation time, both stores are queried: graph lookups find exact structural matches (service names, enum values, function signatures), while vector search finds semantically relevant code chunks. The combined context feeds the LLM.
Each task produces a file like dev_tasks/m1-t2.md containing:
- Project name (resolved from graph)
- Domain entity and task type
- Affected services and APIs (with relative file paths)
- Existing state (concrete code snippets/logic from context)
- Step-by-step required changes
- Constraints and unknowns
- Validation approach
- Execution hint for AI agents
| Layer | Technology |
|---|---|
| Backend | FastAPI |
| Frontend | Streamlit |
| LLM | Gemini 2.5 Flash Lite |
| Transcription | Deepgram Nova-2 (Streaming & Batch) |
| Embeddings | Gemini Embedding 001 |
| Graph database | Neo4j |
| Vector database | Qdrant |
| Relational database | MySQL |
| Code parsing | Tree-sitter (TypeScript Grammar) |
| Audio processing | static-ffmpeg + pydub |
| Jira integration | Jira REST API v3 |
- Python 3.12+
- MySQL
- Neo4j
- Qdrant
- ffmpeg
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtCreate a .env file in the project root:
# MySQL
MYSQL_HOST=127.0.0.1
MYSQL_PORT=3306
MYSQL_USER=your_mysql_user
MYSQL_PASSWORD=your_mysql_password
MYSQL_DATABASE=srot_core
# Neo4j
NEO4J_URI=bolt://localhost:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=your_neo4j_password
# Qdrant
QDRANT_URL=http://localhost:6333
QDRANT_API_KEY=
# Jira
JIRA_BASE_URL=https://your-domain.atlassian.net
JIRA_EMAIL=your_email
JIRA_API_TOKEN=your_jira_api_token
JIRA_PROJECT_KEY=your_project_key
# AI
GEMINI_API_KEY=your_gemini_api_key
DEEPGRAM_API_KEY=your_deepgram_api_key
TRANSCRIPTION_GLOSSARY=Term1, Term2, Term3CREATE DATABASE IF NOT EXISTS srot_core;Tables are created automatically on first startup.
Terminal 1 - Backend:
source .venv/bin/activate
uvicorn backend.main:app --reloadAPI available at http://localhost:8000. Interactive docs at http://localhost:8000/docs.
Terminal 2 - Frontend:
source .venv/bin/activate
streamlit run frontend/app.pyUI available at http://localhost:8501.
- Go to the Upload page
- Upload an audio file (mp3, wav, m4a, ogg, flac, webm)
- The system runs the full intelligence pipeline in batch mode
- Review the generated Hybrid Summary and extracted tasks
- Edit task titles, descriptions, and assignees as needed
- Click Create Jira Ticket to push to Jira and generate the Dev Task file
- Go to the Live page
- Start a session; audio streams via WebSocket to the intelligence pipeline
- Watch the transcript, context snapshots, and Jira suggestions update in real-time
- After the meeting, the final transcript and summary are saved automatically
- Go to the Code Knowledge tab
- Enter the project name and root path of your TypeScript/NestJS codebase
- Click Index Project. The system parses all files, builds the Neo4j graph, and creates Qdrant embeddings
- Define Domain Entities (business concepts like
Calculator,MarksDistribution) and link them to services to improve extraction accuracy
| Method | Endpoint | Description |
|---|---|---|
| POST | /process-meeting |
Upload and process meeting audio (async) |
| GET | /meetings |
List all meetings |
| GET | /meeting/{id} |
Get transcript, tasks, and summary |
| PUT | /meeting/{id}/transcript |
Update transcript and re-extract tasks |
| WS | /ws/intelligence/{id} |
Streaming intelligence pipeline (PCM bytes) |
| POST | /start-live-meeting |
Initialize a live meeting record |
| POST | /finalize-meeting/{id} |
Finalize meeting status and extracted tasks |
| Method | Endpoint | Description |
|---|---|---|
| PUT | /task/{id} |
Update task title, description, or assignee |
| DELETE | /task/{id} |
Dismiss a task |
| POST | /create-jira |
Push a task to Jira and generate dev task file |
| GET | /dev-task |
Fetch dev task file (?meeting=1&task=2 or ?jira=DEV-123) |
| Method | Endpoint | Description |
|---|---|---|
| POST | /index-project |
Start background indexing of a codebase |
| GET | /index-jobs |
List all indexing jobs |
| GET | /index-jobs/{id} |
Get job status and progress |
| GET | /projects |
List indexed projects |
| GET | /services/{project} |
List services in a project |
| POST | /code-knowledge |
Manually add code context (fallback) |
| Method | Endpoint | Description |
|---|---|---|
| GET | /domain-entities |
List domain entities with linked services |
| POST | /domain-entities |
Create a domain entity |
| DELETE | /domain-entities/{id} |
Delete a domain entity |
| POST | /domain-entities/link |
Link a domain entity to a service in Neo4j |
Srot CLI connects your Srot task queue directly to Claude Code, launching an interactive AI session pre-loaded with your task requirements and project context.