{
  "schemaVersion": "1.0",
  "title": "CrewAI Connector",
  "description": "The CrewAI integration has two deployment components:",
  "canonical": "https://getaip.org/docs/connectors/crewai/legacy-overview",
  "route": "/docs/connectors/crewai/legacy-overview",
  "source": "docs/connectors/crewai.md",
  "protocol": "Agent Interoperability Protocol",
  "protocolVersion": "1.0",
  "section": "Connectors",
  "documentType": "Connector",
  "language": "en",
  "downloads": {
    "md": "/docs/download/connectors/crewai/legacy-overview.md",
    "txt": "/docs/download/connectors/crewai/legacy-overview.txt",
    "json": "/docs/download/connectors/crewai/legacy-overview.json",
    "pdf": "/docs/download/connectors/crewai/legacy-overview.pdf"
  },
  "content": {
    "format": "text/markdown",
    "markdown": "# CrewAI Connector\n\nThe CrewAI integration has two deployment components:\n\n1. the Rust `aip-connector-crewai` crate, which publishes AIP capabilities and\n   maps actions, streams, cancellation, and errors;\n2. the Python sidecar, which loads deployment-owned Crew factories and executes\n   one isolated CrewAI crew per AIP action.\n\nThis boundary keeps Python framework objects and provider dependencies out of\nthe Rust semantic core.\n\n## Capability Mapping\n\nEach configured crew becomes `cap:crewai:{crew_id}`. The capability supports\nsynchronous invocation, asynchronous execution, ordered streaming, and\ncancellation. It requires AIP approval and marks inputs and results as\nconfidential, PII-bearing, and redaction-required.\n\nThe connector does not advertise automatic retry, transactions,\nreconciliation, compensation, or frozen credential-handle routing.\n\n## Run the Sidecar\n\nCreate a deployment-owned registry module:\n\n```python\nfrom my_support_project.crew import SupportCrew\n\n\ndef crews():\n    return {\"support\": lambda: SupportCrew().crew()}\n```\n\nThen configure and start the sidecar:\n\n```sh\nexport AIP_CREWAI_REGISTRY=my_deployment.registry:crews\nexport AIP_CREWAI_BEARER_TOKEN=\"$(openssl rand -hex 32)\"\nexport AIP_CREWAI_STATE_FILE=/var/lib/aip-crewai/runs.json\naip-crewai-sidecar\n```\n\nThe service exposes authenticated `/health`, `/runs`, `/runs/stream`,\n`/runs/{action_id}`, and `/runs/{action_id}/cancel` endpoints. The default\nlistener is `0.0.0.0:8090`.\n\nThe sidecar permits an omitted bearer token for local tests. Production startup\nmust require `AIP_CREWAI_BEARER_TOKEN`, keep the listener on a private network,\nand use the same secret only at the Rust connector boundary.\n\n## Safety and Recovery\n\nThe sidecar uses the AIP action id as durable run identity. Reusing that id\nwith different input returns HTTP 409. It bounds input, timeout, concurrency,\nSSE frames, and retained events, and closes the active CrewAI stream during\ncancellation.\n\nWhen a persisted run was still active at restart, the sidecar marks it as an\nuncertain failure rather than silently starting the crew again. Mount the state\njournal on durable storage. Active-active sidecars require an external atomic\ncoordinator for action-id fencing.\n\nThe supplied container configuration disables CrewAI and OpenTelemetry\ntelemetry by default. A deployment that enables tracing must separately govern\ndata processing, retention, and redaction.\n\n## Connect the Rust Boundary\n\nConstruct `CrewAiSidecarConnector` with the sidecar URL and a non-empty list of\nstable crew descriptors, then configure the same bearer token used by the\nsidecar. Register the generated capabilities and frozen handlers in the AIP\ngateway host.\n\nThe stock `aipd` 1.0 binary does not provide CrewAI sidecar CLI options. Host\ncomposition, registry loading, tenant isolation, and secret distribution are\ndeployment responsibilities.\n\n## Qualification Boundary\n\nThe repository includes deterministic sidecar tests and narrow exact-upstream\nevidence using a real CrewAI crew with a deterministic network-free model.\nThat is not a complete retained isolated-live production campaign.\n\nProduction promotion must additionally prove the exact CrewAI revision,\nregistry code, provider credentials, stream and cancellation races, restart\nrecovery, side effects, capacity, tenant isolation, and observability policy.\n\nThe implementation repository keeps the sidecar operations reference at\n`crates/aip-connector-crewai/sidecar/README.md`. See also\n[Pinned Upstream Baselines](upstream-baselines.md) and\n[Conformance and Qualification](../reference/conformance.md).\n",
    "text": "CrewAI Connector\n\nThe CrewAI integration has two deployment components:\n1. the Rust aip-connector-crewai crate, which publishes AIP capabilities and\n   maps actions, streams, cancellation, and errors;\n2. the Python sidecar, which loads deployment-owned Crew factories and executes\n   one isolated CrewAI crew per AIP action.\n\nThis boundary keeps Python framework objects and provider dependencies out of\nthe Rust semantic core.\n\nCapability Mapping\n\nEach configured crew becomes cap:crewai:{crewid}. The capability supports\nsynchronous invocation, asynchronous execution, ordered streaming, and\ncancellation. It requires AIP approval and marks inputs and results as\nconfidential, PII-bearing, and redaction-required.\n\nThe connector does not advertise automatic retry, transactions,\nreconciliation, compensation, or frozen credential-handle routing.\n\nRun the Sidecar\n\nCreate a deployment-owned registry module:\n\nfrom mysupportproject.crew import SupportCrew\n\ndef crews():\n    return {\"support\": lambda: SupportCrew().crew()}\n\nThen configure and start the sidecar:\n\nexport AIPCREWAIREGISTRY=mydeployment.registry:crews\nexport AIPCREWAIBEARERTOKEN=\"$(openssl rand -hex 32)\"\nexport AIPCREWAISTATEFILE=/var/lib/aip-crewai/runs.json\naip-crewai-sidecar\n\nThe service exposes authenticated /health, /runs, /runs/stream,\n/runs/{actionid}, and /runs/{actionid}/cancel endpoints. The default\nlistener is 0.0.0.0:8090.\n\nThe sidecar permits an omitted bearer token for local tests. Production startup\nmust require AIPCREWAIBEARERTOKEN, keep the listener on a private network,\nand use the same secret only at the Rust connector boundary.\n\nSafety and Recovery\n\nThe sidecar uses the AIP action id as durable run identity. Reusing that id\nwith different input returns HTTP 409. It bounds input, timeout, concurrency,\nSSE frames, and retained events, and closes the active CrewAI stream during\ncancellation.\n\nWhen a persisted run was still active at restart, the sidecar marks it as an\nuncertain failure rather than silently starting the crew again. Mount the state\njournal on durable storage. Active-active sidecars require an external atomic\ncoordinator for action-id fencing.\n\nThe supplied container configuration disables CrewAI and OpenTelemetry\ntelemetry by default. A deployment that enables tracing must separately govern\ndata processing, retention, and redaction.\n\nConnect the Rust Boundary\n\nConstruct CrewAiSidecarConnector with the sidecar URL and a non-empty list of\nstable crew descriptors, then configure the same bearer token used by the\nsidecar. Register the generated capabilities and frozen handlers in the AIP\ngateway host.\n\nThe stock aipd 1.0 binary does not provide CrewAI sidecar CLI options. Host\ncomposition, registry loading, tenant isolation, and secret distribution are\ndeployment responsibilities.\n\nQualification Boundary\n\nThe repository includes deterministic sidecar tests and narrow exact-upstream\nevidence using a real CrewAI crew with a deterministic network-free model.\nThat is not a complete retained isolated-live production campaign.\n\nProduction promotion must additionally prove the exact CrewAI revision,\nregistry code, provider credentials, stream and cancellation races, restart\nrecovery, side effects, capacity, tenant isolation, and observability policy.\n\nThe implementation repository keeps the sidecar operations reference at\ncrates/aip-connector-crewai/sidecar/README.md. See also\nPinned Upstream Baselines (upstream-baselines.md) and\nConformance and Qualification (../reference/conformance.md).\n"
  },
  "integrity": {
    "algorithm": "sha256",
    "sourceDigest": "4ef63878b8f2b6881b5597ea91e9dc39f4765eb69320f915d0db1f903ce11466"
  }
}
