
Instrument with Logfire
FreeAdd observability to your applications with ease.
Free · Opens the source repo
What Instrument with Logfire does
The Instrument with Logfire skill provides developers with a straightforward way to integrate observability into their applications using Logfire, an observability platform built on OpenTelemetry. This skill supports Python, JavaScript/TypeScript, and Rust, making it versatile for various projects. By leveraging this skill, users can easily add structured logging, tracing, and monitoring capabilities to their applications, allowing for better insights into application behavior and performance.
When invoked, this skill guides users through the necessary steps to set up Logfire in their projects, including detecting the programming language and relevant frameworks. It emphasizes the importance of the correct order of operations when configuring Logfire, ensuring that the application captures traces and logs correctly. The skill also provides detailed instructions for installing required packages and configuring logging patterns, which are crucial for effective observability.
Developers working with AI and LLMs can benefit from this skill as it includes specific instructions for monitoring AI/LLM calls, capturing important metrics such as token usage and tool invocations. This is particularly useful for applications that rely on PydanticAI, OpenAI, or Anthropic, as it allows for comprehensive tracking of agent runs and API interactions. Overall, this skill is designed for developers looking to enhance their applications with robust observability features without the hassle of misconfiguration.
By using this skill, developers can ensure that their applications are instrumented correctly, providing valuable insights that can help in debugging and performance optimization. The skill aims to simplify the process of adding observability, making it accessible even for those who may not be familiar with the intricacies of Logfire's setup.
When to use it
Use this skill when you want to add observability features like logging, tracing, or metrics to applications in Python, JavaScript/TypeScript, or Rust.
When not to use it
This skill may not be suitable for applications that do not require observability or for languages/frameworks outside of the supported ones.
What you can build with it
Integrating Logfire in a Python FastAPI app
Use this skill to quickly set up Logfire observability in a FastAPI application, ensuring structured logging and tracing.
Monitoring an AI agent's performance
Leverage this skill to instrument an AI agent built with PydanticAI, capturing metrics on LLM calls and tool invocations.
Adding observability to a Node.js application
Invoke this skill to seamlessly integrate Logfire into a Node.js application, enhancing its observability capabilities.
How to install Instrument with Logfire
View source1. Install with the skills CLI
npx skills add basicmachines-co/basic-memory/instrumentation --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by basicmachines-coInstrument with Logfire
When to Use This Skill
Invoke this skill when:
- User asks to "add logfire", "add observability", "add tracing", or "add monitoring"
- User wants to instrument an app with structured logging or tracing (Python, JS/TS, or Rust)
- User mentions Logfire in any context
- User asks to "add logging" or "see what my app is doing"
- User wants to monitor AI/LLM calls (PydanticAI, OpenAI, Anthropic)
- User asks to add observability to an AI agent or LLM pipeline
How Logfire Works
Logfire is an observability platform built on OpenTelemetry. It captures traces, logs, and metrics from applications. Logfire has native SDKs for Python, JavaScript/TypeScript, and Rust, plus support for any language via OpenTelemetry.
The reason this skill exists is that Claude tends to get a few things subtly wrong with Logfire - especially the ordering of configure() vs instrument_*() calls, the structured logging syntax, and which extras to install. These matter because a misconfigured setup silently drops traces.
Step 1: Detect Language and Frameworks
Identify the project language and instrumentable libraries:
- Python: Read
pyproject.tomlorrequirements.txt. Common instrumentable libraries: FastAPI, httpx, asyncpg, SQLAlchemy, psycopg, Redis, Celery, Django, Flask, requests, PydanticAI. - JavaScript/TypeScript: Read
package.json. Common frameworks: Express, Next.js, Fastify. Also check for Cloudflare Workers or Deno. - Rust: Read
Cargo.toml.
Then follow the language-specific steps below.
Python
Install with Extras
Install logfire with extras matching the detected frameworks. Each instrumented library needs its corresponding extra - without it, the instrument_*() call will fail at runtime with a missing dependency error.
uv add 'logfire[fastapi,httpx,asyncpg]'
The full list of available extras: fastapi, starlette, django, flask, httpx, requests, asyncpg, psycopg, psycopg2, sqlalchemy, redis, pymongo, mysql, sqlite3, celery, aiohttp, aws-lambda, system-metrics, litellm, dspy, google-genai.
Configure and Instrument
This is where ordering matters. logfire.configure() initializes the SDK and must come before everything else. The instrument_*() calls register hooks into each library. If you call instrument_*() before configure(), the hooks register but traces go nowhere.
import logfire
# 1. Configure first - always
logfire.configure()
# 2. Instrument libraries - after configure, before app starts
logfire.instrument_fastapi(app)
logfire.instrument_httpx()
logfire.instrument_asyncpg()
Placement rules:
logfire.configure()goes in the application entry point (main.py, or the module that creates the app)- Call it once per process - not inside request handlers, not in library code
instrument_*()calls go right afterconfigure()- Web framework instrumentors (
instrument_fastapi,instrument_flask,instrument_django) need the app instance as an argument. HTTP client and database instrumentors (instrument_httpx,instrument_asyncpg) are global and take no arguments. - In Gunicorn deployments, call
logfire.configure()inside thepost_forkhook, not at module level - each worker is a separate process
Structured Logging
Replace print() and logging.*() calls with Logfire's structured logging. The key pattern: use {key} placeholders with keyword arguments, never f-strings.
# Correct - each {key} becomes a searchable attribute in the Logfire UI
logfire.info("Created user {user_id}", user_id=uid)
logfire.error("Payment failed {amount} {currency}", amount=100, currency="USD")
# Wrong - creates a flat string, nothing is searchable
logfire.info(f"Created user {uid}")
For grouping related operations and measuring duration, use spans:
with logfire.span("Processing order {order_id}", order_id=order_id):
items = await fetch_items(order_id)
total = calculate_total(items)
logfire.info("Calculated total {total}", total=total)
For exceptions, use logfire.exception() which automatically captures the traceback:
try:
await process_order(order_id)
except Exception:
logfire.exception("Failed to process order {order_id}", order_id=order_id)
raise
AI/LLM Instrumentation (Python)
Logfire auto-instruments AI libraries to capture LLM calls, token usage, tool invocations, and agent runs.
uv add 'logfire[pydantic-ai]'
# or: uv add 'logfire[openai]' / uv add 'logfire[anthropic]'
Available AI extras: pydantic-ai, openai, anthropic, litellm, dspy, google-genai.
logfire.configure()
logfire.instrument_pydantic_ai() # captures agent runs, tool calls, LLM request/response
# or:
logfire.instrument_openai() # captures chat completions, embeddings, token counts
logfire.instrument_anthropic() # captures messages, token usage
For PydanticAI, each agent run becomes a parent span containing child spans for every tool call and LLM request.
JavaScript / TypeScript
Install
# Node.js
npm install @pydantic/logfire-node
# Cloudflare Workers
npm install @pydantic/logfire-cf-workers logfire
# Next.js / generic
npm install logfire
Configure
Node.js (Express, Fastify, etc.) - create an instrumentation.ts loaded before your app:
import * as logfire from '@pydantic/logfire-node'
logfire.configure()
Launch with: node --require ./instrumentation.js app.js
The SDK auto-instruments common libraries when loaded before the app. Set LOGFIRE_TOKEN in your environment or pass token to configure().
Cloudflare Workers - wrap your handler with instrument():
import { instrument } from '@pydantic/logfire-cf-workers'
export default instrument(handler, {
service: { name: 'my-worker', version: '1.0.0' }
})
Next.js - set environment variables for OpenTelemetry export:
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=https://logfire-api.pydantic.dev/v1/traces
OTEL_EXPORTER_OTLP_HEADERS=Authorization=<your-write-token>
Structured Logging (JS/TS)
// Structured attributes as second argument
logfire.info('Created user', { user_id: uid })
logfire.error('Payment failed', { amount: 100, currency: 'USD' })
// Spans
logfire.span('Processing order', { order_id }, {}, async () => {
logfire.info('Processing step completed')
})
// Error reporting
logfire.reportError('order processing', error)
Log levels: trace, debug, info, notice, warn, error, fatal.
Rust
Install
[dependencies]
logfire = "0.6"
Configure
let shutdown_handler = logfire::configure()
.install_panic_handler()
.finish()?;
Set LOGFIRE_TOKEN in your environment or use the Logfire CLI to select a project.
Structured Logging (Rust)
The Rust SDK is built on tracing and opentelemetry - existing tracing macros work automatically.
// Spans
logfire::span!("processing order", order_id = order_id).in_scope(|| {
// traced code
});
// Events
logfire::info!("Created user {user_id}", user_id = uid);
Always call shutdown_handler.shutdown() before program exit to flush data.
Verify
After instrumentation, verify the setup works:
- Run
logfire authto check authentication (or setLOGFIRE_TOKEN) - Start the app and trigger a request
- Check https://logfire.pydantic.dev/ for traces
If traces aren't appearing: check that configure() is called before instrument_*() (Python), check that LOGFIRE_TOKEN is set, and check that the correct packages/extras are installed.
References
Detailed patterns and integration tables, organized by language:
- Python:
${CLAUDE_PLUGIN_ROOT}/skills/instrumentation/references/python/logging-patterns.md(log levels, spans, stdlib integration, metrics, capfire testing) and${CLAUDE_PLUGIN_ROOT}/skills/instrumentation/references/python/integrations.md(full instrumentor table with extras) - JavaScript/TypeScript:
${CLAUDE_PLUGIN_ROOT}/skills/instrumentation/references/javascript/patterns.md(log levels, spans, error handling, config) and${CLAUDE_PLUGIN_ROOT}/skills/instrumentation/references/javascript/frameworks.md(Node.js, Cloudflare Workers, Next.js, Deno setup) - Rust:
${CLAUDE_PLUGIN_ROOT}/skills/instrumentation/references/rust/patterns.md(macros, spans, tracing/log crate integration, async, shutdown)
Frequently asked questions about Instrument with Logfire
Similar skills
WinMD API Search
Easily find and explore Windows desktop APIs.
WebMCPify
Transform any web app into an agent-ready platform.
Phoenix Tracing
Instrument LLM applications with OpenInference tracing.
Foundry Hosted Agent CopilotKit
Guidance for developing agentic web apps on Azure.
Power Automate Foundation
Connect AI agents to Power Automate seamlessly.
Power Automate Flow Builder
Efficiently build and deploy Power Automate flows programmatically.
