Skip to main content
CrewAI is an open-source AI agent framework for orchestrating role-playing autonomous agents that collaborate to solve complex tasks through structured crews, agents, and task assignments.

Install CrewAI

pip install crewai
See the CrewAI documentation for details.

OpenAlerts Plugin

AI agents fail silently — LLM errors, stuck sessions, token blowups — nobody knows until a user complains. OpenAlerts watches your agent in real-time and alerts you the moment something goes wrong.

Install

pip install openalerts
Add openalerts.init before your crew runs — everything is monitored automatically from that point:
import asyncio
import openalerts
from crewai import Agent, Task, Crew

async def main():
    await openalerts.init({"framework": "crewai"})

    researcher = Agent(
        role="Researcher",
        goal="Research topics thoroughly",
        backstory="You are an expert researcher.",
        llm="gpt-4o-mini",
    )
    task = Task(
        description="Research the benefits of AI monitoring",
        expected_output="A short summary",
        agent=researcher,
    )
    crew = Crew(agents=[researcher], tasks=[task])
    result = crew.kickoff()
    print(result)

asyncio.run(main())
The CrewAI adapter uses CrewAI’s native event bus — no monkey-patching. Every crew run, agent execution, task step, tool call, and LLM call is tracked automatically with full session correlation (Crew = session, Agent = subagent, Task = step). Cleanup runs on exit. Events are persisted to ~/.openalerts/ as JSONL. To receive alerts on Slack, Discord, or a custom webhook, pass channels in the init config:
await openalerts.init({
    "channels": [
        {"type": "slack", "webhook_url": "https://hooks.slack.com/services/..."},
        {"type": "discord", "webhook_url": "https://discord.com/api/webhooks/..."},
        {"type": "webhook", "webhook_url": "https://your-server.com/alerts"},
    ]
})
Or set environment variables instead (no code changes needed):
OPENALERTS_SLACK_WEBHOOK_URL="https://hooks.slack.com/services/..."
OPENALERTS_DISCORD_WEBHOOK_URL="https://discord.com/api/webhooks/..."
OPENALERTS_WEBHOOK_URL="https://your-server.com/alerts"

Alert Rules

7 rules run against every event in real-time. All thresholds and cooldowns are configurable.
RuleWatches forSeverityDefault threshold
llm-errorsLLM/agent failures in 1 min windowERROR1 error
tool-errorsTool execution failures in 1 min windowWARN1 error
agent-stuckAgent idle too longWARN2 min
token-limitToken limit exceededERROR-
step-limit-warningAgent reaches 80% of max_stepsWARN-
high-error-rateFailure rate over last 20 callsERROR50%
subagent-errorsSubagent failures in 1 min windowWARN1 error
Every rule also accepts enabled (default true) and cooldown_seconds (default 900). To tune rules:
await openalerts.init({
    "channels": [...],
    "rules": {
        "llm-errors": {"threshold": 5},
        "high-error-rate": {"enabled": False},
        "tool-errors": {"cooldown_seconds": 1800},
    },
    "cooldown_seconds": 900,
    "max_alerts_per_hour": 5,
})
Set "quiet": True for log-only mode (no alerts sent to channels).

Dashboard

A real-time web dashboard starts automatically at http://localhost:9464/openalerts:
TabWhat it shows
ActivityStep-by-step execution timeline with tool calls, LLM usage, costs
HealthRule status, alert history, system stats
DebugState snapshot for troubleshooting
By default, the dashboard runs in-process and stops when your agent exits. For a persistent dashboard, run openalerts serve in a separate terminal and disable the in-process one with "dashboard": False. Need additional help? Please reach out to us at hello@steadwing.com