Langfuse Deploy IntegrationSAFE
Model-agnostic agent-skills platform with a harness-free canonical layer, verified adapters, and the ccpi package manager. Explore at tonsofskills.com.
Overview
Model-agnostic agent-skills platform with a harness-free canonical layer, verified adapters, and the ccpi package manager. Explore at tonsofskills.com.
4f83675ca38aOBSERVED · 2026-10-09Host compatibility
What the documentation claims. We have not run a compatibility test.
| Host | Status | Notes |
|---|---|---|
| claude-code | mentioned |
What it tells the agent
The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.
--- name: langfuse-deploy-integration description: 'Deploy Langfuse with your application across different platforms. Use when deploying Langfuse to Vercel, AWS, GCP, or Docker, or integrating Langfuse into your deployment pipeline. Trigger with phrases like "deploy langfuse", "langfuse Vercel", "langfuse AWS", "langfuse Docker", "langfuse production deploy". ' allowed-tools: Read, Write, Edit, Bash(docker:*), Bash(vercel:*), Bash(gcloud:*) version: 1.17.0 license: MIT author: Jeremy Longshore <[email protected]> tags: - saas - langfuse - deployment - docker compatibility: Designed for Claude Code --- # Langfuse Deploy Integration ## Overview Deploy Langfuse LLM observability alongside your application. Covers integrating the SDK for serverless (Vercel/Lambda), Docker, Cloud Run, and self-hosting the Langfuse server itself. ## Prerequisites - Langfuse API keys (cloud or self-hosted) - Application using Langfuse SDK - Target platform CLI installed ## Instructions ### Step 1: Vercel / Next.js Deployment ```bash set -euo pipefail # Add secrets to Vercel vercel env add LANGFUSE_PUBLIC_KEY production vercel env add LANGFUSE_SECRET_KEY production vercel env add LANGFUSE_BASE_URL production ``` ```typescript // app/api/chat/route.ts (Next.js App Router) import { NextRequest, NextResponse } from "next/server"; import { LangfuseClient } from "@langfuse/client"; import { startActiveObservation, updateActiveObservation } from "@langfuse/tracing"; import OpenAI from "openai"; const langfuse = new LangfuseClient(); const openai = new OpenAI(); export async function POST(req: NextRequest) { const { messages } = await req.json(); const response = await startActiveObservation( { name: "chat-api", asType: "generation" }, async () => { updateActiveObservation({ model: "gpt-4o", input: messages, metadata: { endpoint: "/api/chat" }, }); const result = await openai.chat.completions.create({ model: "gpt-4o", messages, }); updateActiveObservation({ output: result.choices[0].message, usage: { promptTokens: result.usage?.prompt_tokens, completionTokens: result.usage?.completion_tokens, }, }); return result.choices[0].message; } ); return NextResponse.json(response); } ``` > **Serverless note:** Langfuse SDK v4+ uses OTel which handles flushing asynchronously. For v3, always call `await langfuse.flushAsync()` before the response returns -- serverless functions may freeze after response. ### Step 2: AWS Lambda / Serverless ```typescript // handler.ts import { LangfuseSpanProcessor } from "@langfuse/otel"; import { NodeSDK } from "@opentelemetry/sdk-node"; import { startActiveObservation, updateActiveObservation } from "@langfuse/tracing"; // Initialize OUTSIDE handler for connection reuse const sdk = new NodeSDK({ spanProcessors: [ new LangfuseSpanProcessor({ exportIntervalMillis: 1000, // Flush fast in serverless }), ], }); sdk.start(); export const handler = async (event: any) => { return await startActiveObservation("lambda-handler", async () => { updateActiveObservation({ input: event }); const result = await processRequest(event); updateActiveObservation({ output: result }); // Force flush before Lambda freezes await sdk.shutdown(); return { statusCode: 200, body: JSON.stringify(result) }; }); }; ``` ### Step 3: Self-Hosted Langfuse Server (Docker) ```yaml # docker-compose.yml services: langfuse: image: langfuse/langfuse:latest ports: - "3000:3000" environment: - DATABASE_URL=postgresql://langfuse:${DB_PASSWORD}@postgres:5432/langfuse - NEXTAUTH_SECRET=${NEXTAUTH_SECRET} - NEXTAUTH_URL=https://langfuse.your-domain.com - SALT=${SALT} - ENCRYPTION_KEY=${ENCRYPTION_KEY} - AUTH_DISABLE_SIGNUP=true - LANGFUSE_DEFAULT_PROJECT_ROLE=VIEWER depends_on: postgres: condition: service_healthy postgres: image: postgres:16-alpine environment: POSTGRES_USER: langfuse POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_DB: langfuse volumes: - pgdata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U langfuse"] interval: 5s timeout: 5s retries: 5 volumes: pgdata: ``` ```bash set -euo pipefail # Generate secrets export DB_PASSWORD=$(openssl rand -hex 16) export NEXTAUTH_SECRET=$(openssl rand -hex 32) export SALT=$(openssl rand -hex 16) export ENCRYPTION_KEY=$(openssl rand -hex 32) # Start docker compose up -d # Wait and verify sleep 10 curl -s http://localhost:3000/api/public/health ``` ### Step 4: Google Cloud Run ```bash set -euo pipefail # Build and push gcloud builds submit --tag gcr.io/$PROJECT_ID/my-llm-app # Deploy with Langfuse env vars from Secret Manager gcloud run deploy my-llm-app \ --image gcr.io/$PROJECT_ID/my-llm-app \ --set-secrets="LANGFUSE_PUBLIC_KEY=langfuse-public-key:latest" \ --set-secrets="LANGFUSE_SECRET_KEY=langfuse-secret-key:latest" \ --set-env-vars="LANGFUSE_BASE_URL=https://cloud.langfuse.com" ``` ### Step 5: Health Check Endpoint ```typescript // app/api/health/route.ts import { LangfuseClient } from "@langfuse/client"; const langfuse = new LangfuseClient(); export async function GET() { try { // Quick connectivity check await langfuse.prompt.get("__health__").catch(() => {}); return Response.json({ status: "healthy", tracing: "enabled" }); } catch { return Response.json( { status: "degraded", tracing: "disabled" }, { status: 503 } ); } } ``` ## Platform-Specific Considerations | Platform | Key Concern | Solution | |----------|-------------|----------| | Vercel/Edge | Function timeout | Flush before response; use v4+ | | AWS Lambda | Cold starts | Initialize SDK outside handler | | Cloud Run | Concurrency | Singleton client, shared OTel SDK | |
Trust audit
SAFEgrade B · trust 89/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | PASS |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- none-observed
- Network
- none-observed
- Shell
- none-observed
- Dependencies
- pinned
- Secrets in source
- none-found
Findings (0)
No findings outside the package's declared scope.
Gates applied: no_behavioural_pass.
4f83675ca38afull audit observations/trust-audit/skill/jeremylongshore__langfuse-deploy-integration.json · Report an issue / request a re-scanAudit history
Every audit this skill has had.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-09 | 4f83675ca38a | SAFE | B | 89 | first audit |
Questions
What does the Langfuse Deploy Integration skill do?
Model-agnostic agent-skills platform with a harness-free canonical layer, verified adapters, and the ccpi package manager. Explore at tonsofskills.com.
Is Langfuse Deploy Integration safe to install?
The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean skill reads B.
What can Langfuse Deploy Integration access on my machine?
The audit observed no filesystem, network or shell use at all in its source.
Which assistants does Langfuse Deploy Integration work with?
Its documentation mentions claude-code. That is what the text claims, not a compatibility test we ran.
How current is this page?
The grade is for one exact copy of the source (4f83675ca38a), read on 2026-10-09. The repository is watched, and a new audit runs when it changes — this is the first audit.