Connect CrewAI Cloud
Stream crew kickoff events into Dobby for policy scanning. ~10 minutes end-to-end. The Dobby-side wizard handles credential storage; this page covers the customer-side kickoff config.
Grab your CrewAI Cloud bearer
In CrewAI Cloud → open the deployment for the crew you want Dobby to observe → Status tab → copy the Bearer Token.
You’ll paste this into Dobby’s wizard in the next step. Same token will also appear in your kickoff payload — Dobby validates the two match so we know the webhook is really from your crew.
Run Dobby’s Connect Workflow wizard
In Dobby → Workloads → Connect Workflow → CrewAI Cloud. Pick the default Paste token mode and paste the bearer from step 1. Dobby encrypts it server-side with your tenant key (AES-256-GCM) and stores ciphertext only — no GCP Secret Manager access needed on your side.
The wizard will probe the token shape, then create a connector and emit your webhook URL on the final step. It looks like:
https://dobby-ai.com/api/v1/webhooks/workloads/wc_xxxxxxxxxxxxTip: The connector page in Dobby is the canonical record. Copy the URL once — you’ll drop it into your kickoff payload below.
Add the webhook config to your kickoff
CrewAI Cloud doesn’t expose a UI for saving webhook config at the crew level, so the webhook lives inside each kickoff request body. Add the webhooks block below to every kickoff you want Dobby to scan.
import os
import requests
# Same bearer you pasted into Dobby (env var keeps it out of source).
CREWAI_BEARER = os.environ["CREWAI_BEARER"]
CREW_ID = "your-crew-id" # from your CrewAI Cloud dashboard URL
DOBBY_WEBHOOK_URL = "https://dobby-ai.com/api/v1/webhooks/workloads/wc_xxx"
response = requests.post(
f"https://app.crewai.com/api/crews/{CREW_ID}/kickoff",
headers={
"Authorization": f"Bearer {CREWAI_BEARER}",
"Content-Type": "application/json",
},
json={
"inputs": {
# your crew inputs here
},
"webhooks": {
"events": [
"crew_kickoff_started",
"crew_kickoff_completed",
"crew_kickoff_failed",
],
"url": DOBBY_WEBHOOK_URL,
"realtime": True,
"authentication": {
"type": "bearer",
"token": CREWAI_BEARER,
},
},
},
timeout=30,
)
response.raise_for_status()
print("Kickoff fired:", response.json())Replace wc_xxx with the connector ID Dobby gave you in step 2, and your-crew-id with your CrewAI crew ID (visible in the dashboard URL).
Fire a test kickoff
Run your kickoff once. CrewAI Cloud will execute the crew and POST crew_kickoff_started / completed / failed events to Dobby in real time.
A typical kickoff completes in 10-60 seconds. Dobby buffers events keyed by execution_id until the terminal event arrives, then writes one workload run + triggers a Policy Scanner pass.
Verify in Dobby
Open Dobby → Workloads. Within ~60 seconds of your test kickoff completing, you should see:
- A new row for the crew with the run status pill
- Last scan verdict (compliant / partial / violated / unverifiable)
- Click through to the scan to see violation details
Tip: If 60 seconds pass and nothing appears, check the troubleshooting section below — the most common issue is the webhooks block missing from the kickoff payload.
Troubleshooting
No workload appears in Dobby after the kickoff
Most common cause: the webhooks block is missing from your kickoff request body, so CrewAI never tells Dobby the run happened. Re-check that your /kickoff POST includes the full webhooks object from step 3 — events list, URL, realtime flag, and the bearer authentication block.
Second cause: a wrong webhook URL. Open the connector in Dobby and copy the URL fresh — IDs are unique per connector, not per tenant.
Dobby shows the run as “Unverifiable”
This means the webhook arrived but the payload was missing fields Dobby needs to scan (typically tool_args or output).
Open a ticket — Dobby ships an in-runtime collector that captures the missing fields before CrewAI strips them. Switching takes ~10 minutes on your side and turns unverifiable scans into full coverage.
401 from Dobby’s webhook receiver
The bearer in your kickoff’s authentication.token doesn’t match the one you pasted into Dobby. Two common causes:
- You rotated the bearer in CrewAI but not in Dobby. Re-run the wizard.
- Whitespace got copy-pasted with the token (trailing newline). Strip and re-paste.
CrewAI’s Webhooks UI doesn’t have a place to save my URL
Correct — CrewAI Cloud doesn’t support saving webhook config at the crew/template level today. The webhook block has to live inside each kickoff request body. That’s exactly the snippet in step 3.
I want all my crews to report to Dobby — do I need one connector per crew?
No. One connector per CrewAI workspace is enough. Reuse the same webhook URL across all your crews — Dobby keys workloads by crew_id in the event payload, so each crew gets its own row in your fleet view.