An AI analyst for your GitLab issue tracker.
A new issue in — a structured WWWH-TR analysis, emailed out.
A tool by ttndevfullstack.
⚡ Lightweight & fast
- No database, minimal dependencies — just fetch, analyze, send.
- Docker Compose deploy with
production/development/testingenvironment modes.
🤖 AI-powered analysis
- Fetches the full issue context: description, comments, related issues, attachments.
- Analyzes with OpenRouter (DeepSeek) or OpenAI, reasoning mode supported.
- Every report is structured through the WWWH-TR thinking framework, not free-form text.
✅ Flexible detection
- Webhook mode reacts instantly, polling mode checks on an interval — pick per environment.
- Built-in web dashboard for manual triggers, stats, and browsing analyzed issues.
- W1 — Why: Root cause and ultimate goal
- W2 — What: Problem identification and information gathering
- W3 — Who: Stakeholders and people who can help
- H — How: Feasible solutions, comparison, and trade-offs
- T — Test: Quick experiments and measurement milestones
- R — Reflect: Evaluation, conclusion, and next steps
╭─ GitLab Issues Analyzer · issue detected ──────────────────────────────╮
│ │
│ # Stage Component Output │
│ ──────────────────────────────────────────────────────────────── │
│ 1 Detect Monitor New issue event (webhook/poll) │
│ 2 Fetch GitLab API Issue + comments + related + files │
│ 3 Analyze AI Provider WWWH-TR structured analysis │
│ 4 Report Reporter Formatted email report │
│ 5 Notify SMTP Email delivered to recipient │
│ │
│ Poll every N seconds, or react instantly to webhook events. │
╰────────────────────────────────────────────────────────────────────────╯
- Docker and Docker Compose
- GitLab Personal Access Token with
apiscope - AI Provider API Key (OpenRouter or OpenAI)
- SMTP credentials for email delivery
Clone the repository:
git clone <repository-url>cd gitlab-issues-analyzer
Create
.envfile:Copy
.env.exampleto.envand configure:# GitLab Configuration GITLAB_URL=https://gitlab.com GITLAB_TOKEN=glpat-your-token-here GITLAB_ISSUE_SCOPE=all GITLAB_ISSUE_LABELS=label1,label2 # AI Provider AI_PROVIDER=openrouter AI_API_KEY=sk-or-your-key-here AI_MODEL=tngtech/deepseek-r1t2-chimera:free AI_ENABLE_REASONING=true AI_MAX_TOKENS=16000 # SMTP Configuration SMTP_HOST=smtp.gmail.com SMTP_PORT=587 SMTP_USERNAME=your-email@gmail.com SMTP_PASSWORD=your-app-password SMTP_FROM_EMAIL=your-email@gmail.com SMTP_TO_EMAIL=recipient@example.com # Application Settings ENVIRONMENT=production ENABLE_AUTOMATION=true APP_MODE=poll POLL_INTERVAL=900 LOG_LEVEL=INFO TIMEZONE=Asia/Ho_Chi_Minh APP_VERSION=1.0.0
Start the application:
docker-compose up -d docker-compose logs -f
Access the dashboard:
Open
http://localhost:8000in your browser.
production(default): Full production settings, 15-minute poll intervaldevelopment: Debug logging, shorter intervals, Flask auto-reload enabledtesting: Processes 1 issue per poll, 1-minute interval, debug logging
Set ISSUE_START_TIME to process only issues created after a specific time:
- Format:
2026-01-05T00:00:00Z(ISO 8601) or2026-01-05 00:00:00(space-separated) - Default: Current time (only new issues after startup)
- Useful for local development to avoid reprocessing existing issues
Set MAX_ISSUES_PER_POLL=1 to process only one issue per polling cycle for testing.
See the Configuration Guide for the complete reference.
| Doc | Covers |
|---|---|
| Configuration Guide | Complete configuration reference |
| Deployment Guide | Platform-specific deployment instructions |
| API Integration | GitLab and AI API details |
| Architecture | System design and components |
| FAQ | Troubleshooting and common questions |
docker-compose -f docker-compose.yml -f docker-compose.dev.yml upCode changes are automatically picked up on the next poll cycle or Flask restart.
# Run all tests
pytest tests/ -v
# With coverage
pytest tests/ --cov=src --cov-report=html# Format code
black src/ main.py tests/
isort src/ main.py tests/
# Lint
flake8 src/ main.pydocker-compose up -d --build| Dependency | Required | Notes |
|---|---|---|
| Docker + Docker Compose | ✅ | Runtime and deployment |
GitLab Personal Access Token (api scope) | ✅ | GitLab issue access |
| AI Provider API key (OpenRouter or OpenAI) | ✅ | Powers the analysis |
| SMTP credentials | ✅ | Email report delivery |
MIT License
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Add tests for new features
- Ensure all tests pass and code quality checks pass
- Submit a pull request
For detailed documentation, see docs/INDEX.md