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.

How do I install CrewAI?

pip install crewai
See the CrewAI documentation for details.

How do I set up OpenAlerts for CrewAI?

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