CrewAI
Capture traces from CrewAI crews with OpenLit
Choose a setup method
| Method | Use it when |
|---|---|
| Voxmith skill | You want your coding agent to inspect the app, make the change, and verify it. |
| Voxmith SDK | You want explicit control over the interaction boundaries and fields. |
| OpenTelemetry | The framework already emits useful spans or you operate an OTel pipeline. |
Start with one method for a call path. Combining SDK tracking with framework OpenTelemetry on the same call can create duplicate interactions.
Recommended: Voxmith skill
Recommended. Choose this path when you want your coding agent to inspect the project, select a supported transport, make the smallest instrumentation change, send a test event, and verify that it reached Voxmith.
Install the skill once in your coding-agent environment:
npx skills add Voxmith/skills --skill voxmithRun the framework-specific prompt below from the application root. Review the resulting diff before deploying it.
Use the voxmith skill to add Voxmith analytics to this CrewAI application.
Org ID: your-org-id
Instrument the real crew.kickoff() path and verify one fresh interaction.Manual setup: Voxmith SDK
pip install voxmithimport voxmith
voxmith.init("your-org-id")
interaction = voxmith.begin(user_id="u-42", agent_name="crewai-research", input=prompt)
try:
result = crew.kickoff(inputs={"prompt": prompt})
interaction.end(output=str(result))
except Exception as exc:
interaction.end(output=str(exc), success=False)
raise
finally:
voxmith.shutdown()Manual setup: OpenTelemetry
OpenLit is the recommended path: it auto-instruments CrewAI plus the underlying LLM provider.
Install
pip install crewai openlitSetup
import os, openlit
from crewai import Agent, Crew, Task
from openinference.instrumentation import using_attributes
os.environ["OTEL_EXPORTER_OTLP_ENDPOINT"] = "https://otel.voxmith.com"
os.environ["OTEL_EXPORTER_OTLP_HEADERS"] = "X-Voxmith-Org-ID=<your-org-id>"
openlit.init(application_name="my-crew", environment="production")
with using_attributes(session_id="sess-123", user_id="u-42"):
Crew(agents=[...], tasks=[...]).kickoff()Spans use OTel GenAI semconv (gen_ai.prompt.{n}.content, gen_ai.completion.{n}.content, gen_ai.usage.*) plus gen_ai.agent.name and gen_ai.operation.name on agent/task spans.
Caveats
- Call
openlit.init()before constructing anyCrew/Agentobjects. - CrewAI's own anonymized telemetry (sent to CrewAI's servers) is unrelated and can be left enabled.
Verify
Run one Crew(...).kickoff() call, then open Events in Voxmith. Confirm CrewAI and provider spans are present.
Troubleshooting
- Call
openlit.init()before constructing crews or agents. - Confirm
OTEL_EXPORTER_OTLP_HEADERScontainsX-Voxmith-Org-ID=<your-org-id>. - Wrap runs with
using_attributesif you need explicit user/session grouping.
References
Next steps
- Conversations: review the complete CrewAI execution.
- Events: inspect crew, task, and model activity.
- Intents: organize production conversations by what users wanted.