Add Observability to Your AI Agent in 3 Lines
Drop-in integrations for LangChain, OpenAI Agents, Claude, and CrewAI. No manual instrumentation required.
The Problem
Section titled “The Problem”You’re using a framework to build your agent. You want to see every chain step, tool call, and LLM interaction — without wrapping each one in custom logging. You need observability that plugs into your existing code, not a rewrite.
The Solution
Section titled “The Solution”pip install axonpush[langchain] # LangChain / LangGraphpip install axonpush[openai-agents] # OpenAI Agents SDKpip install axonpush[anthropic] # Claude / Anthropicpip install axonpush[crewai] # CrewAIpip install axonpush[deepagents] # LangChain Deep AgentsLangChain / LangGraph
Section titled “LangChain / LangGraph”from axonpush import AxonPushfrom axonpush.integrations.langchain import AxonPushCallbackHandler
client = AxonPush(api_key="ak_...", tenant_id="1", base_url="https://api.axonpush.xyz")handler = AxonPushCallbackHandler(client, channel_id=1, agent_id="my-agent")
chain.invoke({"input": "research AI frameworks"}, config={"callbacks": [handler]})OpenAI Agents SDK
Section titled “OpenAI Agents SDK”from axonpush import AsyncAxonPushfrom axonpush.integrations.openai_agents import AxonPushRunHooks
client = AsyncAxonPush(api_key="ak_...", tenant_id="1", base_url="https://api.axonpush.xyz")hooks = AxonPushRunHooks(client, channel_id=1)
result = await Runner.run(agent, input="research AI frameworks", hooks=hooks)Claude / Anthropic
Section titled “Claude / Anthropic”from axonpush import AxonPushfrom axonpush.integrations.anthropic import AxonPushAnthropicTracer
client = AxonPush(api_key="ak_...", tenant_id="1", base_url="https://api.axonpush.xyz")tracer = AxonPushAnthropicTracer(client, channel_id=1)
response = tracer.create_message( anthropic_client, model="claude-sonnet-4-20250514", messages=[{"role": "user", "content": "Research AI frameworks"}],)CrewAI
Section titled “CrewAI”from axonpush import AxonPushfrom axonpush.integrations.crewai import AxonPushCrewCallbacks
client = AxonPush(api_key="ak_...", tenant_id="1", base_url="https://api.axonpush.xyz")callbacks = AxonPushCrewCallbacks(client, channel_id=1)
callbacks.on_crew_start()result = Crew( agents=[researcher, writer], tasks=[research_task, write_task], step_callback=callbacks.on_step, task_callback=callbacks.on_task_complete,).kickoff()callbacks.on_crew_end(result)LangChain Deep Agents
Section titled “LangChain Deep Agents”from deepagents import create_deep_agentfrom axonpush import AxonPushfrom axonpush.integrations.deepagents import AxonPushDeepAgentHandler
client = AxonPush(api_key="ak_...", tenant_id="1", base_url="https://api.axonpush.xyz")handler = AxonPushDeepAgentHandler(client, channel_id=1, agent_id="deep-agent")
agent = create_deep_agent(tools=[], system_prompt="You are a helpful assistant.")agent.invoke( {"messages": [{"role": "user", "content": "Research AI frameworks"}]}, config={"callbacks": [handler]},)Events Published by Each Integration
Section titled “Events Published by Each Integration”| Framework | Events |
|---|---|
| LangChain | chain.start, chain.end, chain.error, llm.start, llm.end, tool.<name>.start, tool.end |
| OpenAI Agents | agent.run.start, agent.run.end, tool.<name>.start, tool.<name>.end, agent.handoff |
| Anthropic | conversation.turn, tool.<name>.start, agent.response, tool.result |
| CrewAI | crew.start, crew.end, agent.step, tool.<name>.start, tool.<name>.end, task.complete |
| Deep Agents | chain.start/end, llm.start/end, planning.update/complete, subagent.spawn/complete, filesystem.read/write, sandbox.execute |
Go Deeper
Cross-service trace correlation
Section titled “Cross-service trace correlation”Pass the same trace_id across services to build a unified trace:
handler = AxonPushCallbackHandler(client, channel_id=1, trace_id="tr_shared_123")hooks = AxonPushRunHooks(client, channel_id=2, trace_id="tr_shared_123")Both services’ events appear in the same trace when you call client.traces.get_events("tr_shared_123").