blamebot
Health Warn
- No license — Repository has no license file
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 9 GitHub stars
Code Warn
- process.env — Environment variable access in app/api/auth/github/callback/route.ts
- network request — Outbound network request in app/api/auth/github/callback/route.ts
- process.env — Environment variable access in app/api/auth/github/route.ts
- process.env — Environment variable access in app/api/auth/slack/callback/route.ts
- network request — Outbound network request in app/api/auth/slack/callback/route.ts
- process.env — Environment variable access in app/api/auth/slack/route.ts
- process.env — Environment variable access in app/api/config/credentials/route.ts
Permissions Pass
- Permissions — No dangerous permissions requested
This tool is an autonomous on-call agent designed to monitor deploy failures, analyze root causes using AI, page the responsible teams via Slack, and automatically roll back problematic deployments.
Security Assessment
The overall risk is rated as Medium. As an infrastructure-monitoring agent, the tool inherently handles sensitive data by accessing external services like GitHub, Slack, and Vercel to perform its duties. The codebase safely relies on environment variables for these credentials rather than using hardcoded secrets. It makes standard outbound network requests to handle OAuth callbacks and communicate with external APIs, which is expected behavior. Additionally, it does not request dangerous permissions or execute arbitrary shell commands. However, the lack of a defined license presents a legal ambiguity regarding liability, especially for a tool with autonomous rollback capabilities that could impact production environments.
Quality Assessment
The project is highly active, with its most recent push occurring just today, and it features a comprehensive, well-documented README. However, community trust and visibility are currently very low, as indicated by only 9 GitHub stars. Most notably, the repository lacks a license file, meaning the author retains all exclusive rights under default copyright law. This strictly limits how organizations can legally use, modify, or distribute the codebase.
Verdict
Use with caution — the tool functions securely without dangerous exploits, but you should wait for an explicit open-source license before integrating this autonomous agent into a production environment.
AI on-call agent that detects deploy failures explains what broke pages the responsible team and rolls back automatically.
BlameBot — AI-Powered Incident Intelligence
Vercel Zero to Agent Hackathon submission · Solo · Deployed on Vercel
BlameBot is an autonomous on-call agent that closes the loop from deploy failure to resolved incident — without waking up your whole team at 3 AM. It ingests alerts from Vercel, Sentry, and UptimeRobot, uses AI to explain what broke and who owns it, pages the right person via Slack, and can roll back the deployment automatically.
The Problem
Every on-call rotation has the same failure loop:
- Alert fires at 2 AM
- Engineer scrambles to find the right Slack thread, the right commit, the right person
- 40 minutes later: "oh it was that one deploy"
- Team manually writes a postmortem (or doesn't)
BlameBot collapses that 40-minute scramble into a 10-second AI summary with one-click rollback.
How It Works
Webhook (Vercel / Sentry / UptimeRobot)
│
▼
┌───────────────────────────────────────────────────────┐
│ Incident Pipeline │
│ │
│ Normalize → Enrich (GitHub) → Resolve Owners │
│ → Decide Severity → Find Similar Incidents │
│ → AI Report (Claude Sonnet) → Persist (Redis) │
│ → Post to Slack → Schedule Escalation │
└───────────────────────────────────────────────────────┘
│
▼
Slack alert with AI summary, blame, and action buttons
(Acknowledge / Rollback / Draft Hotfix PR)
│
▼
Dashboard + Analytics + Postmortem
Pipeline Steps
| Step | What happens |
|---|---|
| Normalize | Converts raw webhook payloads into a standard incident format |
| Enrich | Fetches commit SHA, PR info, and changed file list from GitHub |
| Resolve Owners | Matches changed files against glob-pattern ownership rules |
| Decide Severity | Applies configurable rules (site-down = critical, etc.) |
| Find Similar | Queries Redis for incidents on the same files in the last 30 days |
| AI Report | Claude Sonnet generates root cause, blast radius, recommended action |
| Persist | Saves incident + timeline to Upstash Redis |
| Post to Slack | Sends rich Block Kit message to your incidents channel |
| Schedule Escalation | Sets up timed escalation if incident goes unacknowledged |
Features
Live Dashboard
- Active incident count with severity breakdown
- Real-time incident feed
- Integration health status (Vercel, Sentry, UptimeRobot)
- Top offenders — developers causing the most incidents
- Activity feed across all ongoing incidents
AI-Powered Incident Reports
- Root cause analysis written in plain English
- Blast radius assessment (affected services, users, regions)
- Recommended action (rollback, hotfix, monitor)
- Automatic similarity detection against recent incidents
- One-click postmortem generation
Slack-First Response
- Rich Block Kit incident cards with all context in one message
- Acknowledge / Rollback / Draft Hotfix PR buttons
- Thread-based timeline updates
- Escalation alerts when incidents go unacknowledged
Analytics
- Incident trends over time charted by severity
- MTTR (Mean Time to Resolution) tracking
- Top problematic files and services
- Developer reliability scores and leaderboard
- Risk heatmap — incidents by day of week and hour
- Service health scores
Configuration Panel
- Owner Rules — file glob → Slack user/group mapping
- Severity Rules — pattern-based auto-classification
- Escalation Policy — per-severity delay and escalation contacts
- Blackout Windows — timezone-aware quiet hours with fallback contact
- Autopilot — auto-rollback thresholds per severity level
- Natural Language Config — update any setting in plain English via AI
Autopilot Mode
When enabled, BlameBot can automatically roll back a failing deployment via the Vercel API without any human intervention. Configurable per severity level with a confirmation grace window.
Tech Stack
| Layer | Technology |
|---|---|
| Framework | Next.js 16 (App Router) |
| UI | React 19, Tailwind CSS v4, shadcn/ui |
| AI | Vercel AI SDK 6, Claude Sonnet (Anthropic) |
| Database | Upstash Redis |
| Integrations | Vercel API, GitHub (Octokit), Slack |
| Charts | Recharts |
| Deployment | Vercel (with Cron Jobs) |
Setup
Prerequisites
- Node.js 18+
- pnpm
- Upstash Redis instance
- Vercel project
- Slack app (bot token + signing secret)
- GitHub personal access token
1. Clone and install
git clone https://github.com/VusalHuseynov/blamebot
cd blamebot
pnpm install
2. Configure environment variables
Create .env.local in the project root:
# ── App ────────────────────────────────────────────────
APP_URL=http://localhost:3000
NEXT_PUBLIC_APP_URL=http://localhost:3000
# ── Upstash Redis ───────────────────────────────────────
# Create a database at https://console.upstash.com
UPSTASH_REDIS_REST_URL=https://your-db.upstash.io
UPSTASH_REDIS_REST_TOKEN=your_token
KV_REST_API_URL=https://your-db.upstash.io
KV_REST_API_TOKEN=your_token
# ── GitHub ──────────────────────────────────────────────
# PAT with repo + read:org scopes
GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx
GITHUB_OWNER=your-org-or-username
GITHUB_REPO=your-repo-name
# For GitHub OAuth (optional)
GITHUB_CLIENT_ID=Iv1.xxxxxxxxxxxx
GITHUB_CLIENT_SECRET=your_secret
# ── Slack ───────────────────────────────────────────────
# Create an app at https://api.slack.com/apps
SLACK_BOT_TOKEN=xoxb-xxxxxxxxxxxx
SLACK_SIGNING_SECRET=your_signing_secret
SLACK_INCIDENTS_CHANNEL_ID=C0XXXXXXXXX
# For Slack OAuth (optional)
SLACK_CLIENT_ID=your_client_id
SLACK_CLIENT_SECRET=your_client_secret
# ── Vercel ──────────────────────────────────────────────
# API token from https://vercel.com/account/tokens
VERCEL_API_TOKEN=your_vercel_token
VERCEL_PROJECT_ID=prj_xxxxxxxxxxxx
# VERCEL_TEAM_ID only needed for team projects
VERCEL_TEAM_ID=team_xxxxxxxxxxxx
# ── Webhook secrets ─────────────────────────────────────
# Generate with: openssl rand -hex 32
VERCEL_WEBHOOK_SECRET=your_secret
SENTRY_WEBHOOK_SECRET=your_secret
UPTIMEROBOT_WEBHOOK_SECRET=your_secret
# ── Admin ───────────────────────────────────────────────
ADMIN_TOKEN=your_admin_token
ADMIN_COOKIE_SECRET=your_cookie_secret
# ── Cron ────────────────────────────────────────────────
CRON_SECRET=your_cron_secret
3. Run locally
pnpm dev
Open http://localhost:3000.
4. Seed demo data (optional)
curl -X POST http://localhost:3000/api/seed
This populates Redis with sample incidents, timeline events, and developer scores so the dashboard is populated immediately.
Webhook Setup
Point these services at your deployed URL:
Vercel
Settings → Webhooks → Add webhook
URL: https://your-app.vercel.app/api/webhooks/vercel
Events: deployment.error, deployment.canceled
Sentry
Project Settings → Developer Settings → Internal Integration → Webhooks
URL: https://your-app.vercel.app/api/webhooks/sentry
Events: issue (created, resolved)
UptimeRobot
My Settings → Alert Contacts → Add Alert Contact
Type: Web-hook
URL: https://your-app.vercel.app/api/webhooks/uptime
All webhook endpoints validate HMAC signatures. Set the corresponding *_WEBHOOK_SECRET env vars to match what each service sends.
Slack App Setup
Go to api.slack.com/apps → Create New App → From manifest
Use this manifest:
display_information:
name: BlameBot
description: AI-powered incident intelligence
features:
bot_user:
display_name: BlameBot
always_online: true
slash_commands:
- command: /incident
url: https://your-app.vercel.app/api/slack/commands
description: Query BlameBot about incidents
interactivity:
is_enabled: true
request_url: https://your-app.vercel.app/api/slack/interactivity
oauth_config:
scopes:
bot:
- chat:write
- channels:history
- channels:read
- commands
settings:
event_subscriptions:
request_url: https://your-app.vercel.app/api/slack/events
bot_events:
- message.channels
- Install to workspace, copy
Bot User OAuth Token→SLACK_BOT_TOKEN - Copy Signing Secret →
SLACK_SIGNING_SECRET
Deployment
BlameBot is built for Vercel. Push to your repo and connect the project.
The included vercel.json configures a daily escalation cron:
{
"crons": [
{
"path": "/api/cron/escalations",
"schedule": "0 0 * * *"
}
]
}
Set all environment variables in the Vercel dashboard under Settings → Environment Variables.
API Reference
| Method | Path | Description |
|---|---|---|
GET |
/api/incidents |
List incidents with optional status/severity filter |
POST |
/api/incidents |
Create incident manually |
GET |
/api/incidents/[id] |
Get single incident |
GET |
/api/incidents/[id]/timeline |
Get incident timeline events |
GET/POST |
/api/incidents/[id]/postmortem |
Get or generate AI postmortem |
POST |
/api/webhooks/vercel |
Vercel deployment webhook |
POST |
/api/webhooks/sentry |
Sentry error webhook |
POST |
/api/webhooks/uptime |
UptimeRobot downtime webhook |
GET |
/api/analytics |
Aggregated analytics data |
GET/PUT |
/api/config/owners |
Owner rule configuration |
GET/PUT |
/api/config/escalation |
Escalation policy |
GET/PUT |
/api/config/severity |
Severity classification rules |
GET/PUT |
/api/config/autopilot |
Autopilot settings |
GET/PUT |
/api/config/blackout |
Blackout windows |
POST |
/api/config/nl |
Natural language config update |
GET |
/api/health |
Health check |
Project Structure
blamebot/
├── app/
│ ├── (pages)/ # Next.js App Router pages
│ │ ├── dashboard/
│ │ ├── incidents/
│ │ ├── analytics/
│ │ └── config/
│ └── api/ # API routes
│ ├── webhooks/ # Webhook receivers
│ ├── incidents/ # Incident CRUD
│ ├── config/ # Configuration endpoints
│ ├── slack/ # Slack event/command/interactivity
│ ├── analytics/ # Analytics aggregation
│ └── cron/ # Scheduled jobs
├── lib/
│ ├── pipeline/ # Core incident processing
│ │ ├── index.ts # Orchestrator
│ │ ├── normalize.ts # Webhook normalization
│ │ ├── enrich.ts # GitHub enrichment
│ │ ├── severity.ts # Severity classification
│ │ ├── history.ts # Similar incident search
│ │ ├── ai.ts # Claude AI integration
│ │ ├── devscore.ts # Developer scoring
│ │ └── actions.ts # Rollback / hotfix actions
│ ├── schemas.ts # Zod schemas
│ ├── types.ts # TypeScript types
│ └── redis.ts # Redis client
├── components/ # React components
└── vercel.json # Cron job config
Built for Vercel Zero to Agent Hackathon
This project was built as a solo submission for the Vercel Zero to Agent Hackathon (April 24 – May 3, 2025).
Why BlameBot fits the "Zero to Agent" theme:
- It is a genuine autonomous agent, not a chatbot. It receives a signal, reasons about it, takes action, and reports back — all without human involvement.
- The agent loop spans multiple tools: GitHub for code context, Vercel API for rollback actions, Slack for communication, and Claude for reasoning.
- Autopilot mode lets it close the full loop: detect → analyze → act → report — zero human steps required.
License
MIT
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found