
Security News
Ruby's Bundler 4.0.18 Extends Cooldown to bundle lock and bundle cache
The supply chain control that delays freshly published gems now covers lockfile generation and gem vendoring in Ruby projects.
@breadcrumb-sdk/ai-sdk
Advanced tools
Trace Vercel AI SDK calls with Breadcrumb. **[Documentation](https://breadcrumb.sh/docs)**
Trace Vercel AI SDK calls with Breadcrumb. Documentation
Pass experimental_telemetry to any generateText, streamText, or generateObject call and it shows up in your dashboard automatically.
npm install @breadcrumb-sdk/core @breadcrumb-sdk/ai-sdk
import { init } from "@breadcrumb-sdk/core";
import { initAiSdk } from "@breadcrumb-sdk/ai-sdk";
import { generateText } from "ai";
import { anthropic } from "@ai-sdk/anthropic";
const bc = init({
apiKey: "bc_...",
baseUrl: "https://your-breadcrumb-instance.com",
environment: "production",
});
const { telemetry } = initAiSdk(bc);
const { text } = await generateText({
model: anthropic("claude-opus-4-6"),
prompt: "What is TypeScript?",
experimental_telemetry: telemetry("answer-question"),
});
Each call with telemetry() shows up as its own trace in the dashboard. No other setup needed.
Set environment on init() if you want AI SDK traces tagged as "production", "staging", "development", and so on for environment filtering.
If you want multiple calls to appear under a single trace, wrap them in bc.trace():
await bc.trace("chat-request", async () => {
await generateText({ ..., experimental_telemetry: telemetry("plan") });
await generateText({ ..., experimental_telemetry: telemetry("respond") });
});
You can also mix in manual steps — for example a retrieval step that isn't an LLM call:
await bc.trace("rag-pipeline", async () => {
const docs = await bc.span("retrieve", async (span) => {
span.set({ metadata: { source: "vector-db", top_k: 5 } });
return await vectorSearch(query);
}, { type: "retrieval" });
await generateText({
model,
prompt: `Context: ${docs.join("\n")}\n\nQuestion: ${query}`,
experimental_telemetry: telemetry("generate"),
});
});
initAiSdk(bc)Takes your bc instance and returns the telemetry helper. Call once after init().
const { telemetry } = initAiSdk(bc);
telemetry(functionId, metadata?)Returns the config to pass to experimental_telemetry.
experimental_telemetry: telemetry("my-step")
experimental_telemetry: telemetry("my-step", { userId: "u_123", temperature: 0.7 })
| Parameter | Type | Description |
|---|---|---|
functionId | string | Name shown in the trace UI |
metadata | Record<string, string | number | boolean | ...[]> | Extra data attached to the span |
Works with AI SDK 5 and AI SDK 6.
AGPL-3.0 — see LICENSE for details.
FAQs
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
The supply chain control that delays freshly published gems now covers lockfile generation and gem vendoring in Ruby projects.

Security News
During a UK cyber test, a Mythos 5 agent used sockpuppets, social engineering, and prompt injection to try to get a maintainer to merge malware.

Company News
Socket is now in the AWS Security Hub Extended plan. Adopt it through AWS, apply committed spend, and block malicious open source packages.