langsmith-trace
langchain-ai/langsmith-skills
Add tracing to LangChain/LangGraph apps and query trace data via LangSmith CLI.
What is langsmith-trace?
This skill enables you to instrument applications with LangSmith tracing for debugging and analysis. It covers automatic tracing for LangChain/LangGraph apps, manual instrumentation for other frameworks using decorators, and querying/exporting trace data via the langsmith CLI tool.
- Automatically trace LangChain and LangGraph applications by setting environment variables
- Manually instrument non-LangChain apps using @traceable decorators and client wrappers (Python and TypeScript)
- Query traces and runs using the langsmith CLI with filtering by time, performance, errors, and metadata
- Export trace data to JSONL files for analysis and dataset creation
- Distinguish between traces (complete execution trees) and runs (individual nodes) for proper querying
How to install langsmith-trace
npx skills add https://github.com/langchain-ai/langsmith-skills --skill langsmith-trace- LANGSMITH_API_KEY environment variable (required)
- langsmith CLI tool installed via provided install script
- For LangChain apps: LangChain/LangGraph library
- For non-LangChain apps: Python 3.7+ or Node.js 14+ depending on language
How to use langsmith-trace
- 1.Install the langsmith CLI tool using the provided install script
- 2.Set LANGSMITH_API_KEY and optionally LANGSMITH_PROJECT environment variables
- 3.For LangChain apps: set LANGSMITH_TRACING=true and run your application normally
- 4.For other Python apps: import @traceable decorator and wrap_openai(), decorate functions and wrap LLM clients
- 5.For TypeScript apps: import traceable() and wrapOpenAI(), wrap functions and clients
- 6.Query traces using langsmith trace list with filters (--limit, --last-n-minutes, --error, etc.)
- 7.Export traces using langsmith trace export to create datasets or backup data
Use cases
- Debug LLM application behavior by viewing complete execution hierarchies with all LLM calls and tool invocations
- Export traces to create evaluation datasets for testing and benchmarking
- Monitor application performance by filtering traces by latency, errors, and token usage
- Analyze nested function calls in RAG pipelines and multi-step agent workflows
- Track conversation threads and experiment results across multiple runs
- LangChain/LangGraph application developers
- ML engineers building and debugging LLM applications
- Teams evaluating and benchmarking AI agents
- Developers integrating custom LLM clients with tracing
langsmith-trace FAQ
A trace is a complete execution tree representing one full invocation with all nested operations (LLM calls, tool calls, etc.). A run is a single node in that tree. Query traces first for complete context; use runs for analyzing specific operations.
No. For LangChain/LangGraph apps, tracing is automatic. Just set LANGSMITH_TRACING=true and LANGSMITH_API_KEY environment variables.
Use the @traceable decorator (Python) or traceable() wrapper (TypeScript) on your functions, and wrap your LLM client with wrap_openai() or wrapOpenAI() for automatic LLM call tracing.
Yes. Use --min-latency to find slow traces, --error to find failed traces, and --include-metadata to see timing and token counts in listings.
Traces are exported to JSONL files (one file per trace in a directory), while runs are exported to a single JSONL file. Use trace export for complete hierarchies.
Full instructions (SKILL.md)
Source of truth, from langchain-ai/langsmith-skills.
name: langsmith-trace description: "INVOKE THIS SKILL when working with LangSmith tracing OR querying traces. Covers adding tracing to applications and querying/exporting trace data. Uses the langsmith CLI tool."
<oneliner> Two main topics: **adding tracing** to your application, and **querying traces** for debugging and analysis. Python and Javascript implementations are both supported. </oneliner> <setup> Environment VariablesLANGSMITH_API_KEY=lsv2_pt_your_api_key_here # REQUIRED
LANGSMITH_PROJECT=your-project-name # Optional: default project
LANGSMITH_WORKSPACE_ID=your-workspace-id # Optional: for org-scoped keys
Authentication is REQUIRED: either set the LANGSMITH_API_KEY environment variable, or pass the --api-key flag to CLI commands (preferred):
langsmith trace list --project my-project --api-key $LANGSMITH_API_KEY
IMPORTANT: Always check the environment variables or .env file for LANGSMITH_PROJECT before querying or interacting with LangSmith. This tells you which project contains the relevant traces and data. If the LangSmith project is not available, use your best judgement to identify the right one.
CLI Tool
curl -sSL https://raw.githubusercontent.com/langchain-ai/langsmith-cli/main/scripts/install.sh | sh
</setup>
<trace_langchain_oss> For LangChain/LangGraph apps, tracing is automatic. Just set environment variables:
export LANGSMITH_TRACING=true
export LANGSMITH_API_KEY=<your-api-key>
export OPENAI_API_KEY=<your-openai-api-key> # or your LLM provider's key
Optional variables:
LANGSMITH_PROJECT- specify project name (defaults to "default")LANGCHAIN_CALLBACKS_BACKGROUND=false- use for serverless to ensure traces complete before function exit (Python) </trace_langchain_oss>
<trace_other_frameworks> For non-LangChain apps, if the framework has native OpenTelemetry support, use LangSmith's OpenTelemetry integration.
If the app is NOT using a framework, or using one without automatic OTel support, use the traceable decorator/wrapper and wrap your LLM client.
<python> Use @traceable decorator and wrap_openai() for automatic tracing. ```python from langsmith import traceable from langsmith.wrappers import wrap_openai from openai import OpenAIclient = wrap_openai(OpenAI())
@traceable def my_llm_pipeline(question: str) -> str: resp = client.chat.completions.create( model="gpt-4o-mini", messages=[{"role": "user", "content": question}], ) return resp.choices[0].message.content
Nested tracing example
@traceable def rag_pipeline(question: str) -> str: docs = retrieve_docs(question) return generate_answer(question, docs)
@traceable(name="retrieve_docs") def retrieve_docs(query: str) -> list[str]: return docs
@traceable(name="generate_answer") def generate_answer(question: str, docs: list[str]) -> str: return client.chat.completions.create(...)
</python>
<typescript>
Use traceable() wrapper and wrapOpenAI() for automatic tracing.
```typescript
import { traceable } from "langsmith/traceable";
import { wrapOpenAI } from "langsmith/wrappers";
import OpenAI from "openai";
const client = wrapOpenAI(new OpenAI());
const myLlmPipeline = traceable(async (question: string): Promise<string> => {
const resp = await client.chat.completions.create({
model: "gpt-4o-mini",
messages: [{ role: "user", content: question }],
});
return resp.choices[0].message.content || "";
}, { name: "my_llm_pipeline" });
// Nested tracing example
const retrieveDocs = traceable(async (query: string): Promise<string[]> => {
return docs;
}, { name: "retrieve_docs" });
const generateAnswer = traceable(async (question: string, docs: string[]): Promise<string> => {
const resp = await client.chat.completions.create({
model: "gpt-4o-mini",
messages: [{ role: "user", content: `${question}\nContext: ${docs.join("\n")}` }],
});
return resp.choices[0].message.content || "";
}, { name: "generate_answer" });
const ragPipeline = traceable(async (question: string): Promise<string> => {
const docs = await retrieveDocs(question);
return await generateAnswer(question, docs);
}, { name: "rag_pipeline" });
</typescript>
Best Practices:
- Apply traceable to all nested functions you want visible in LangSmith
- Wrapped clients auto-trace all calls —
wrap_openai()/wrapOpenAI()records every LLM call - Name your traces for easier filtering
- Add metadata for searchability </trace_other_frameworks>
<traces_vs_runs>
Use the langsmith CLI to query trace data.
Understanding the difference is critical:
- Trace = A complete execution tree (root run + all child runs). A trace represents one full agent invocation with all its LLM calls, tool calls, and nested operations.
- Run = A single node in the tree (one LLM call, one tool call, etc.)
Generally, query traces first — they provide complete context and preserve hierarchy needed for trajectory analysis and dataset generation. </traces_vs_runs>
<command_structure> Two command groups with consistent behavior:
langsmith
├── trace (operations on trace trees - USE THIS FIRST)
│ ├── list - List traces (filters apply to root run)
│ ├── get - Get single trace with full hierarchy
│ └── export - Export traces to JSONL files (one file per trace)
│
├── run (operations on individual runs - for specific analysis)
│ ├── list - List runs (flat, filters apply to any run)
│ ├── get - Get single run
│ └── export - Export runs to single JSONL file (flat)
│
├── dataset (dataset operations)
│ ├── list - List datasets
│ ├── get - Get dataset details
│ ├── create - Create empty dataset
│ ├── delete - Delete dataset
│ ├── export - Export dataset to file
│ └── upload - Upload local JSON as dataset
│
├── example (example operations)
│ ├── list - List examples in a dataset
│ ├── create - Add example to a dataset
│ └── delete - Delete an example
│
├── evaluator (evaluator operations)
│ ├── list - List evaluators
│ ├── upload - Upload evaluator
│ └── delete - Delete evaluator
│
├── experiment (experiment operations)
│ ├── list - List experiments
│ └── get - Get experiment results
│
├── thread (thread operations)
│ ├── list - List conversation threads
│ └── get - Get thread details
│
└── project (project operations)
└── list - List tracing projects
Key differences:
traces * | runs * | |
|---|---|---|
| Filters apply to | Root run only | Any matching run |
--run-type | Not available | Available |
| Returns | Full hierarchy | Flat list |
| Export output | Directory (one file/trace) | Single file |
| </command_structure> |
<querying_traces>
Query traces using the langsmith CLI. Commands are language-agnostic.
# List recent traces (most common operation)
langsmith trace list --limit 10 --project my-project --api-key $LANGSMITH_API_KEY
# List traces with metadata (timing, tokens, costs)
langsmith trace list --limit 10 --include-metadata --api-key $LANGSMITH_API_KEY
# Filter traces by time
langsmith trace list --last-n-minutes 60 --api-key $LANGSMITH_API_KEY
langsmith trace list --since 2025-01-20T10:00:00Z --api-key $LANGSMITH_API_KEY
# Get specific trace with full hierarchy
langsmith trace get <trace-id> --api-key $LANGSMITH_API_KEY
# List traces and show hierarchy inline
langsmith trace list --limit 5 --show-hierarchy --api-key $LANGSMITH_API_KEY
# Export traces to JSONL (one file per trace, includes all runs)
langsmith trace export ./traces --limit 20 --full --api-key $LANGSMITH_API_KEY
# Filter traces by performance
langsmith trace list --min-latency 5.0 --limit 10 --api-key $LANGSMITH_API_KEY # Slow traces (>= 5s)
langsmith trace list --error --last-n-minutes 60 --api-key $LANGSMITH_API_KEY # Failed traces
# List specific run types (flat list)
langsmith run list --run-type llm --limit 20 --api-key $LANGSMITH_API_KEY
</querying_traces>
<filters> All commands support these filters (all AND together):Basic filters:
--trace-ids abc,def- Filter to specific traces--limit N- Max results--project NAME- Project name--last-n-minutes N- Time filter--since TIMESTAMP- Time filter (ISO format)--error / --no-error- Error status--name PATTERN- Name contains (case-insensitive)
Performance filters:
--min-latency SECONDS- Minimum latency (e.g.,5for >= 5s)--max-latency SECONDS- Maximum latency--min-tokens N- Minimum total tokens--tags tag1,tag2- Has any of these tags
Advanced filter:
--filter QUERY- Raw LangSmith filter query for complex cases (feedback, metadata, etc.)
# Filter traces by feedback score using raw LangSmith query
langsmith trace list --filter 'and(eq(feedback_key, "correctness"), gte(feedback_score, 0.8))' --api-key $LANGSMITH_API_KEY
</filters>
<export_format>
Export creates .jsonl files (one run per line) with these fields:
{"run_id": "...", "trace_id": "...", "name": "...", "run_type": "...", "parent_run_id": "...", "inputs": {...}, "outputs": {...}}
Use --include-io or --full to include inputs/outputs (required for dataset generation).
</export_format>
Related skills
More from langchain-ai/langsmith-skills and the wider catalog.

langsmith-dataset
Create, manage, and upload evaluation datasets to LangSmith for testing and validation.

langsmith-evaluator
Build evaluation pipelines for LangSmith with LLM-as-Judge and custom code evaluators.

backend-dev-guidelines
Shared backend guide for Langfuse's Next.js, tRPC, BullMQ, and TypeScript monorepo. Use when creating or reviewing tRPC routers, public REST endpoints, BullMQ queue processors, backend services, middleware, Prisma or ClickHouse data access, OpenTelemetry instrumentation, Zod validation, env configuration, or backend tests across web, worker, or packages/shared.

langfuse
Query and modify Langfuse data via CLI, access documentation, and understand Langfuse features.
backend-code-review
Review backend code for quality, security, maintainability, and best practices based on established checklist rules. Use when the user requests a review, analysis, or improvement of backend files (e.g., `.py`) under the `api/` directory. Do NOT use for frontend files (e.g., `.tsx`, `.ts`, `.js`). Supports pending-change review, code snippets review, and file-focused review.
component-refactoring
Refactor high-complexity React components in Dify frontend using extraction patterns and automated analysis.