An AI-powered productivity agent that unifies Jira, GitHub, and Google Calendar through natural language in Slack
Features β’ Quick Start β’ Architecture β’ Documentation β’ Contributing
- Overview
- Features
- Architecture
- Quick Start
- Installation
- Configuration
- Usage
- API Reference
- Deployment
- Development
- Documentation
- Contributing
- License
Continuum.ai is an intelligent productivity agent that eliminates context switching by providing unified access to Jira, GitHub, and Google Calendar through natural language in Slack. It understands context, remembers conversations, and orchestrates complex workflows across multiple tools.
Developers waste 30-40% of their time context-switching between:
- Jira for task management
- GitHub for code reviews and PR tracking
- Google Calendar for scheduling and availability
Continuum.ai brings all these tools together in one intelligent interface:
- Natural Language Interface - Ask questions in plain English
- Context-Aware - Remembers team context, skills, and preferences
- Multi-Tool Orchestration - Executes complex workflows across platforms
- Persistent Memory - Retains conversation history and team knowledge
- Proactive Features - Auto-summaries, suggestions, and workload dashboards
-
π Task Management
- Query Jira issues, create/update tasks, check board status
- Interactive buttons for quick actions (Mark Done, Assign to Me)
- Smart delegation recommendations based on team skills and workload
-
π PR Tracking
- Monitor PRs, check CI/CD status, review approvals
- PR summaries with change overview and merge readiness
- Request reviews and manage assignees
-
π Calendar Integration
- Check availability, schedule meetings, find free slots
- Create calendar events linked to Jira issues
- Multi-tool orchestration (e.g., "Schedule meeting about KAN-123")
-
π€ Smart Delegation
- Context-aware recommendations based on:
- Team member skills (stored in persistent memory)
- Current workload
- Historical contributions
- Task requirements
- Context-aware recommendations based on:
-
π Auto-Summaries
- Daily standup generation (
/standup) - PR summaries with CI status and review counts
- Jira issue summaries with context
- Team workload dashboards
- Daily standup generation (
- β‘ Instant Acknowledgment - Immediate response while processing
- π§΅ Thread-Based Conversations - Maintain context across messages
- β¨οΈ Quick Action Shortcuts - Slash commands for common queries
- π Interactive Buttons - One-click actions on tasks and PRs
- π‘ Context-Aware Suggestions - Proactive recommendations
- π Team Workload Dashboard - Visualize team capacity
| Command | Description |
|---|---|
/my-tasks |
View all your open Jira tasks |
/my-prs |
View all your open pull requests |
/my-week |
This week's calendar + tasks overview |
/standup |
Auto-generated daily standup summary |
/blockers |
Find all blocked items |
/team-status |
Team workload dashboard |
/suggestions |
Context-aware suggestions |
Key Components:
- FastAPI Application (
app/slack_bot.py) - Main Slack bot server - MCP Server (
app/server.py) - Model Context Protocol server - Agno Agent (
app/agno_agent.py) - Specialized agent for Jira/GitHub/Calendar - Conversational Agent (
app/agent/conversation.py) - General chat agent - Tool Layer (
app/agno_tools/,app/tools/) - API client wrappers - Feature Layer (
app/slack_features.py) - Slack-specific features - Trigger System (
app/triggers/) - Webhooks and scheduled tasks - Delegation Engine (
app/delegation/) - Smart task assignment - Policy Engine (
app/policy/) - Decision-making rules
- Backend Framework: FastAPI (Python)
- Agent Framework: Agno
- LLM: Google Gemini 3 Pro
- Database: MongoDB (persistent memory)
- APIs:
- Slack API (Events, Slash Commands, Interactive Components)
- Jira API v3 + Agile API
- GitHub REST API
- Google Calendar API
- Deployment: EC2 (Ubuntu), systemd services
User Request β Slack β FastAPI Router
β
[Route Decision]
β
βββββββββββββββββ΄ββββββββββββββββ
β β
Agno Agent Conversational Agent
(Jira/GitHub/Calendar) (General Chat)
β β
Tool Execution ββββββββββββ API Calls
β β
MongoDB Memory ββββββββββββ Response Formatting
β β
Slack Response ββββββββββ
- Python 3.9+
- MongoDB (local or cloud)
- Slack workspace with admin access
- Jira Cloud account
- GitHub account
- Google Cloud Project (for Calendar API)
git clone https://github.com/yourusername/continuum.ai.git
cd continuum.aipython -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
pip install -r requirements.txtCopy env.example to .env and fill in your credentials:
cp env.example .envEdit .env with your credentials (see Configuration section).
Development Mode:
# Start Slack Bot
uvicorn app.slack_bot:app --host 0.0.0.0 --port 3000 --reload
# Start MCP Server (in another terminal)
uvicorn app.server:app --host 0.0.0.0 --port 8000 --reloadProduction Mode (with systemd):
# Make script executable
chmod +x manage_services.sh
# Start services
./manage_services.sh start
# Check status
./manage_services.sh status
# View logs
./manage_services.sh logs# Create virtual environment
python3.9 -m venv .venv
source .venv/bin/activate
# Install dependencies
pip install --upgrade pip
pip install -r requirements.txtLocal MongoDB:
# Install MongoDB (Ubuntu)
sudo apt-get install mongodb
# Start MongoDB
sudo systemctl start mongodb
sudo systemctl enable mongodbMongoDB Atlas (Cloud):
- Create account at MongoDB Atlas
- Create a cluster
- Get connection string
- Add to
.envasMONGODB_URL
-
Go to Slack API
-
Create a new app
-
Configure OAuth & Permissions:
- Bot Token Scopes:
app_mentions:readchannels:historychat:writecommandsim:historyim:writeusers:read
- User Token Scopes (if needed):
channels:readusers:read
- Bot Token Scopes:
-
Enable Event Subscriptions:
- Request URL:
https://your-domain.com/slack/events - Subscribe to bot events:
app_mentionsmessage.channelsmessage.immessage.groups
- Request URL:
-
Enable Interactivity:
- Request URL:
https://your-domain.com/slack/interactions
- Request URL:
-
Create Slash Commands:
/my-tasks,/my-prs,/my-week,/standup,/blockers,/team-status,/suggestions- Request URL:
https://your-domain.com/slack/commands
-
Install app to workspace and copy tokens
- Go to Atlassian Account Settings
- Create API token
- Get your Jira URL (e.g.,
https://your-domain.atlassian.net) - Add credentials to
.env
- Go to GitHub Settings > Developer settings > Personal access tokens
- Generate token with scopes:
repo(full control of private repositories)read:org(read org membership)
- Add token to
.env
Option A: Service Account (Recommended for Production)
- Go to Google Cloud Console
- Create a project or select existing
- Enable Google Calendar API
- Create Service Account:
- Go to IAM & Admin > Service Accounts
- Create service account
- Download JSON key file
- Share calendar with service account email (grant "Make changes to events" permission)
- Add path to JSON file in
.env
Option B: OAuth2 (For Development)
- Create OAuth 2.0 credentials in Google Cloud Console
- Download client secrets JSON
- Run OAuth flow on first use
- Add credentials path to
.env
See docs/GCP_CREDENTIALS_EC2.md for detailed instructions.
Create a .env file in the project root:
# Slack Configuration
SLACK_BOT_TOKEN=xoxb-your-bot-token
SLACK_APP_TOKEN=xapp-your-app-token
SLACK_SIGNING_SECRET=your-signing-secret
# Jira Configuration
JIRA_URL=https://your-domain.atlassian.net
JIRA_EMAIL=your-email@example.com
JIRA_API_TOKEN=your-jira-api-token
# GitHub Configuration
GITHUB_TOKEN=your-github-personal-access-token
GITHUB_OWNER=your-org-or-username
GITHUB_REPO=your-repo-name
# Google Calendar Configuration
GOOGLE_APPLICATION_CREDENTIALS=path/to/service-account-key.json
# OR for OAuth2:
GOOGLE_CLIENT_SECRETS_FILE=path/to/client-secrets.json
GCP_PROJECT_ID=your-project-id
GCP_LOCATION=us-central1
# MongoDB Configuration
MONGODB_URL=mongodb://localhost:27017/continuum
# OR for MongoDB Atlas:
MONGODB_URL=mongodb+srv://username:password@cluster.mongodb.net/continuum
# Optional: Logging
LOG_LEVEL=INFO.env- Environment variables (not committed to git)env.example- Template for environment variablesmanage_services.sh- Service management script
Tag the bot in Slack and ask questions:
@continuum What are my open tasks?
@continuum Show me PRs that need my review
@continuum What's my availability this week?
@continuum Schedule a meeting tomorrow at 2pm about KAN-123
@continuum Who should I assign this task to?
@continuum Summarize PR #42
@continuum Summarize issue KAN-123
Use slash commands for quick access:
/my-tasks # View all open Jira tasks
/my-prs # View all open PRs
/my-week # This week's overview
/standup # Generate daily standup
/blockers # Find blocked items
/team-status # Team workload dashboard
/suggestions # Context-aware suggestions
Action Buttons:
- Click "Mark Done" to close a Jira issue
- Click "Assign to Me" to assign an issue to yourself
- Click "Review" to review a PR
Thread Conversations:
- Reply to bot messages in threads to maintain context
- Reference previous messages naturally
1. Morning Standup:
/standup
2. Task Delegation:
@continuum The CI/CD pipeline is causing issues, whom should I assign the task to?
3. Multi-Tool Orchestration:
@continuum Check available slots for avyukt, assign PR #42 to him, create a Jira issue with him assigned, and schedule a meeting about it
4. PR Review:
@continuum What PRs need my review?
@continuum Summarize PR #42
POST /slack/events- Slack event webhookPOST /slack/commands- Slash command handlerPOST /slack/interactions- Interactive component handlerGET /health- Health check endpointPOST /webhooks/github- GitHub webhook handlerPOST /webhooks/jira- Jira webhook handler
GET /mcp/- MCP server rootPOST /mcp/tools/call- Tool execution endpoint
Jira Tools:
get_jira_issues_tool- Query Jira issuesget_jira_issue_tool- Get single issuecreate_jira_issue_tool- Create new issueupdate_jira_issue_tool- Update issueget_jira_projects_tool- List projectsget_jira_boards_tool- List boardsget_jira_board_issues_tool- Get board issuesfind_jira_user_tool- Find user by name/email
GitHub Tools:
get_github_pulls_tool- List pull requestsget_github_pull_tool- Get single PRget_github_pr_context_tool- Get comprehensive PR contextget_github_pr_checks_tool- Get CI/CD statusget_github_pr_reviews_tool- Get reviewscreate_github_pr_tool- Create PRupdate_github_pr_tool- Update PRupdate_github_pr_assignees_tool- Manage assigneesupdate_github_pr_labels_tool- Manage labelsrequest_github_pr_review_tool- Request review
Calendar Tools:
list_calendars_tool- List accessible calendarsget_calendar_events_tool- Get events for date rangeget_calendar_availability_tool- Get availability with free slotsget_today_events_tool- Get today's eventsget_this_week_availability_tool- Get week availabilitycreate_calendar_event_tool- Create calendar event
1. Launch EC2 Instance:
- AMI: Ubuntu 22.04 LTS
- Instance Type: t3.medium or larger
- Security Group: Allow HTTP (80), HTTPS (443), and custom ports (3000, 8000)
2. Initial Setup:
# Update system
sudo apt-get update && sudo apt-get upgrade -y
# Install Python and dependencies
sudo apt-get install -y python3.9 python3.9-venv python3-pip git
# Install MongoDB (if using local)
sudo apt-get install -y mongodb
# Clone repository
git clone https://github.com/yourusername/continuum.ai.git
cd continuum.ai3. Configure Environment:
# Create .env file
cp env.example .env
nano .env # Edit with your credentials4. Install Application:
# Create virtual environment
python3.9 -m venv .venv
source .venv/bin/activate
# Install dependencies
pip install -r requirements.txt5. Set Up systemd Services:
Create service files (see docs/EC2_SYSTEMD_SETUP.md for details):
# Slack Bot Service
sudo nano /etc/systemd/system/continuum-slack-bot.service
# MCP Server Service
sudo nano /etc/systemd/system/continuum-mcp.service6. Start Services:
# Make management script executable
chmod +x manage_services.sh
# Start services
./manage_services.sh start
# Enable on boot
./manage_services.sh enable7. Set Up Reverse Proxy (Optional):
Use Nginx or Cloudflare Tunnel for HTTPS:
# Install Nginx
sudo apt-get install -y nginx
# Configure Nginx (see docs/NGROK_QUICK_SETUP.md for Cloudflare Tunnel alternative)For HTTPS without exposing ports:
# Install cloudflared
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb
# Authenticate
cloudflared tunnel login
# Create tunnel
cloudflared tunnel create continuum
# Configure tunnel
# Edit ~/.cloudflared/config.ymlSee docs/NGROK_QUICK_SETUP.md and docs/CLOUDFLARE_TUNNEL_SETUP.md for details.
View Logs:
# All services
./manage_services.sh logs
# Individual services
./manage_services.sh logs-slack
./manage_services.sh logs-mcpCheck Status:
./manage_services.sh statusHealth Checks:
# Slack Bot
curl http://localhost:3000/health
# MCP Server
curl http://localhost:8000/mcp/continuum.ai/
βββ app/
β βββ __init__.py
β βββ slack_bot.py # Main Slack bot FastAPI app
β βββ server.py # MCP server
β βββ agno_agent.py # Agno-based agent
β βββ slack_features.py # Slack-specific features
β βββ streamlit_app.py # Streamlit frontend (optional)
β βββ agent/
β β βββ conversation.py # Conversational agent
β βββ agno_tools/ # Agno tool wrappers
β β βββ jira_tools.py
β β βββ github_tools.py
β β βββ calendar_tools.py
β βββ tools/ # Core API clients
β β βββ jira.py
β β βββ github.py
β β βββ calendar.py
β βββ triggers/ # Trigger system
β β βββ scheduler.py
β β βββ webhooks.py
β β βββ detector.py
β β βββ processor.py
β βββ delegation/ # Delegation engine
β β βββ selector.py
β β βββ notifier.py
β β βββ config.py
β βββ policy/ # Policy engine
β βββ decision.py
β βββ rules.py
β βββ scoring.py
βββ docs/ # Documentation
β βββ ARCHITECTURE_DIAGRAMS.md
β βββ PRESENTATION_SLIDES.md
β βββ SLACK_FEATURES_GUIDE.md
β βββ ...
βββ manage_services.sh # Service management script
βββ requirements.txt # Python dependencies
βββ env.example # Environment template
βββ LICENSE # MIT License
βββ README.md # This file
# Activate virtual environment
source .venv/bin/activate
# Start Slack Bot (with auto-reload)
uvicorn app.slack_bot:app --host 0.0.0.0 --port 3000 --reload
# Start MCP Server (with auto-reload)
uvicorn app.server:app --host 0.0.0.0 --port 8000 --reload# Test Slack bot health
curl http://localhost:3000/health
# Test MCP server
curl http://localhost:8000/mcp/
# Run verification script
python final_verify.py- Follow PEP 8 Python style guide
- Use type hints where possible
- Document functions with docstrings
- Keep functions focused and modular
- Architecture Diagrams - System architecture and process flows
- Presentation Slides - Presentation content and demo script
- Slack Features Guide - Detailed feature documentation
- EC2 Setup Guide - EC2 deployment instructions
- EC2 systemd Setup - Service configuration
- GCP Credentials Setup - Google Calendar API setup
- Slack Bot Setup - Slack app configuration
- Slack Bot Testing - Testing guide
- Slack Bot Troubleshooting - Common issues and solutions
- Trigger System - Webhook and scheduler system
- Delegation Engine - Smart task assignment
- Policy Engine - Decision-making rules
- Streamlit Frontend - Optional web UI
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Write clear commit messages
- Add tests for new features
- Update documentation as needed
- Follow existing code style
- Ensure all tests pass
If you find a bug or have a feature request, please open an issue on GitHub with:
- Clear description of the problem/feature
- Steps to reproduce (for bugs)
- Expected vs actual behavior
- Environment details (OS, Python version, etc.)
This project is licensed under the MIT License - see the LICENSE file for details.
.png)
.png)





