---
title: "Langfuse Workshop - the AI engineering loop, end to end"
description: "This is a step-by-step Langfuse workshop built on a small TypeScript sample application: the Dad IT Support Agent. The workshop covers the full AI engineering loop with Langfuse..."
shortTitle: "Overview"
---
<img width="2400" height="600" alt="hero-b (1)" src="https://github.com/user-attachments/assets/a8fa4fbf-fd68-4167-acc4-0f68497602b3" />

# Langfuse Workshop - the AI engineering loop, end to end

Workshop material is maintained in the public [`langfuse/langfuse-workshop`](https://github.com/langfuse/langfuse-workshop) repository. Use the repository for the runnable app, checkpoint branches, and local setup.

[View this Markdown file](https://github.com/langfuse/langfuse-workshop/blob/main/README.md)

This is a step-by-step Langfuse workshop built on a small TypeScript sample application: the **Dad IT Support Agent**. The workshop covers the full AI engineering loop with Langfuse: tracing, prompt management, monitoring, datasets, experiments, and evaluation.

You can complete the workshop on your own from the learner lessons, or use the instructor notes to teach the same material to a group.

> ⚠️ Use **Langfuse Cloud** so you have the latest features this workshop describes. Self-hosted instances may be on an older version and will not match the lessons.

## For learners

Start with the learner lessons in [`docs/learner/`](/workshop/learner). Each lesson tells you which checkpoint to check out, what to change in code or configure in Langfuse, and how to verify the result.

Use the learner path if you want to:

- Log your first trace from a real LLM app and understand what you are looking at.
- Move a prompt into Langfuse so changes are versioned and linked to traces.
- Monitor production behavior without reading every trace by hand.
- Build a dataset, run experiments, and evaluate changes with evidence.
- Inspect a complete TypeScript reference implementation you can copy patterns from.

No instructor is required. The learner lessons are complete enough to run the workshop in self-guided mode.

## For instructors

The instructor guide is for people who want to teach Langfuse to others. Use the notes in [`docs/instructor/`](/workshop/instructor) alongside the learner lessons when you are facilitating a live workshop, recording a walkthrough, or adapting the material for a team.

For preparation we included a guide and slides on how to prepare for the workshop [`docs/preparation_and_materials/`](https://github.com/langfuse/langfuse-workshop/tree/main/docs/preparation_and_materials).

The workshop does not depend on an instructor. The instructor notes add teaching points, demo rhythm, setup reminders, and common pitfalls; they are not required for someone completing the workshop alone.

## Workshop scope

The sample app is a small web chat where Dad opens the chat to get iPhone help. The agent is named **Specs** and answers with step-by-step instructions. Under the hood, it is a normal OpenAI tool-calling loop with two local tools.

![The AI Engineering Loop](https://raw.githubusercontent.com/langfuse/langfuse-workshop/main/docs/images/AI-engineering-loop.png)

![The Dad IT Support Agent sample app: Specs greeting Dad, suggestion chips, and the iPhone side panel.](https://raw.githubusercontent.com/langfuse/langfuse-workshop/main/docs/images/sample_app.png)

`main` contains the complete reference app and current workshop docs. Use it to inspect the finished implementation or compare your work against the end state. The exercises themselves start from checkpoint tags.

## Modules

| Step | Learner lesson | Instructor notes | Checkpoint | What you will learn |
| --- | --- | --- | --- | --- |
| 00 | [Setup](/workshop/learner/00-setup) | [Instructor notes](/workshop/instructor/00-setup) | `checkpoint/00-setup` | Keys, install, run the app. |
| 01 | [Base App](/workshop/learner/01-base-app) | [Instructor notes](/workshop/instructor/01-base-app) | `checkpoint/01-base-app` | Tour the running app. Nothing to build. |
| 02 | [Tracing](/workshop/learner/02-tracing) | [Instructor notes](/workshop/instructor/02-tracing) | `checkpoint/02-tracing` | Log every agent step: generations, agent root, tool spans. |
| 03 | [Prompt Management](/workshop/learner/03-prompt-management) | [Instructor notes](/workshop/instructor/03-prompt-management) | `checkpoint/03-prompt-management` | Move the system prompt into Langfuse. |
| 04 | [Monitoring](/workshop/learner/04-monitoring) | [Instructor notes](/workshop/instructor/04-monitoring) | `checkpoint/04-monitoring` | Catch out-of-scope requests and user disagreement. |
| 05 | [Dataset](/workshop/learner/05-dataset) | [Instructor notes](/workshop/instructor/05-dataset) | `checkpoint/05-dataset` | Turn product scope into reusable examples. |
| 06 | [Experiments](/workshop/learner/06-experiments) | [Instructor notes](/workshop/instructor/06-experiments) | `checkpoint/06-experiments` | Run the agent against the dataset and score every item. |
| 07 | [Evaluation](/workshop/learner/07-evaluation) | [Instructor notes](/workshop/instructor/07-evaluation) | `checkpoint/07-evaluation` | Change one thing, rerun the dataset, compare runs. |
| 08 | [Wrap-up](/workshop/learner/08-wrap-up) | [Instructor notes](/workshop/instructor/08-wrap-up) | `checkpoint/08-wrap-up` | Apply the loop to your own app. |

## How to work through it

`main` is the complete reference implementation. For hands-on work, check out the checkpoint named in the lesson you are starting, make the missing changes, and verify the result before moving on.

`checkpoint/00-setup` and `checkpoint/01-base-app` intentionally contain the same untraced base app. Setup uses that state to validate keys, dependencies, and ports; Base App uses it for orientation. Tracing starts in `02-tracing`.

The workshop server and npm helper scripts treat the repository `.env` as the Node-side source of truth. Local shell exports from other projects do not override `.env`, so change workshop keys, Langfuse host, prompt labels, and dataset names in that file.

The workshop is small enough to finish in a sitting, and every module can also be used independently if you only care about one part of the loop.

## Repository layout

- [`docs/learner/`](/workshop/learner) contains the self-guided workshop lessons.
- [`docs/instructor/`](/workshop/instructor) contains facilitator notes for teaching the same lessons.
- [`docs/images/`](https://github.com/langfuse/langfuse-workshop/tree/main/docs/images) contains screenshots and diagrams, grouped by lesson.
- [`src/`](https://github.com/langfuse/langfuse-workshop/tree/main/src) contains the sample app.
- [`scripts/`](https://github.com/langfuse/langfuse-workshop/tree/main/scripts) contains dataset and prompt helper scripts used in later lessons.

## Where to go next

- Walk the modules in order starting from [`docs/learner/00-setup.md`](/workshop/learner/00-setup).
- Jump to whichever chapter matches what you want to learn.
- Install the [Langfuse skill](https://github.com/langfuse/skills) (`/langfuse`) to apply the patterns from this workshop to your own codebase.
- For bigger-picture material on each chapter, use the [Langfuse Academy](https://langfuse.com/academy).

<!-- agent-instructions -->

---

## Agent Instructions

This page is part of the [Langfuse](https://langfuse.com) documentation, published as plain Markdown for AI agents. Every page is available as Markdown by appending `.md` to its URL, or by sending an `Accept: text/markdown` header. This page: `https://langfuse.com/workshop.md`.

### Querying these docs

If the answer is not on this page, query the documentation instead of guessing:

- **Semantic search** across all Langfuse docs, returning an answer with the relevant pages and excerpts. Ask a specific, self-contained question:

  ```bash
  curl -sG "https://langfuse.com/api/search-docs" --data-urlencode "query=How do I trace a LangGraph agent?"
  ```

- **Index of every page**: <https://langfuse.com/llms.txt>, with per-section indexes [llms-docs.txt](https://langfuse.com/llms-docs.txt), [llms-integrations.txt](https://langfuse.com/llms-integrations.txt), and [llms-self-hosting.txt](https://langfuse.com/llms-self-hosting.txt).

### Before writing Langfuse code

- **Install the [Langfuse Agent Skill](https://langfuse.com/docs/api-and-data-platform/features/agent-skill).** It encodes Langfuse's own best practices for instrumentation, prompt management, and evaluation, and materially improves results.
- **Read [What does a good trace look like?](https://langfuse.com/docs/observability/best-practices.md)** before instrumenting an application.
- **Verify endpoints, parameters, and response fields** against the [API reference](https://api.reference.langfuse.com) instead of inferring them from code examples.
- **Use the [Langfuse CLI](https://langfuse.com/docs/api-and-data-platform/features/cli)** (`npx langfuse-cli api <resource> <action>`) to read or write traces, prompts, datasets, and scores from the terminal.

Found an error in these docs? Please open an issue at <https://github.com/langfuse/langfuse-docs/issues>.
