Agent frameworks

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. 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 voxmith

Run 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 voxmith
import 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 openlit

Setup

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 any Crew / Agent objects.
  • 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_HEADERS contains X-Voxmith-Org-ID=<your-org-id>.
  • Wrap runs with using_attributes if 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.