Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
c73c9c0
quick edit to readme (#37)
donald-pinckney Mar 12, 2026
c013b87
Fix saga compensations to run under cancellation protection (#43)
donald-pinckney Mar 17, 2026
291f4e5
Update readme for public preview (#45)
donald-pinckney Mar 18, 2026
21d1d41
a few more readme tweaks (#46)
donald-pinckney Mar 18, 2026
6cd40f2
Add MIT License to the project (#47)
donald-pinckney Mar 18, 2026
e16c9b8
Add Go (supersedes other PR) (#38)
donald-pinckney Mar 19, 2026
b9a0728
Setup CODEOWNERS to AI SDK team (#48)
donald-pinckney Mar 19, 2026
29e4600
Align version number in SKILL.md and plugin.json. (#49)
donald-pinckney Mar 19, 2026
b5719bc
PR Tracking Initial Release (#4)
donald-pinckney Mar 19, 2026
6137e38
hotfix: clean up skills.sh instruction (#51)
donald-pinckney Mar 19, 2026
1cc4591
Merge branch 'main' into dev
donald-pinckney Mar 19, 2026
e4afb09
Add packaging workflow to release a public version and support Claude…
MasonEgger Mar 25, 2026
68ebe14
Fix typos and broken references across skill docs (#56)
jacksonlo Mar 31, 2026
b040ae1
Fix Python reference bugs: incorrect API name, syntax error, broken c…
trevoryao Mar 31, 2026
57c08ef
Add `@workflow.init` decorator to python.md Key Concepts (#57)
brianstrauch Mar 31, 2026
8369c65
Remove ASCII diagram, replace with prose. (#66)
donald-pinckney Apr 2, 2026
9b97cee
[fix] Add missing section to TS's observability (#65)
donald-pinckney Apr 2, 2026
3d4ea71
Merge pull request #58 from temporalio/release
donald-pinckney Apr 2, 2026
0c8586b
Add Java SDK support (#42)
donald-pinckney Apr 2, 2026
7d5ae76
Reduce repetition in determinism sans sandboxing (#67)
donald-pinckney Apr 2, 2026
25eb553
Bump to 0.2.0 for Java release (#72)
donald-pinckney Apr 3, 2026
26b4362
Merge pull request #73 from temporalio/dev
donald-pinckney Apr 3, 2026
33747f0
Auto-formatting: ran `mdformat --extensions frontmatter --number .` (…
donald-pinckney Apr 17, 2026
9715547
Upstreaming https://github.com/temporalio/codex-temporal-plugin/pull/…
donald-pinckney Apr 17, 2026
f4926d5
Add skill to plugin syncing workflow (#78)
donald-pinckney Apr 17, 2026
c92f5ec
Update to latest versions of actions, to address deprecation warnings…
donald-pinckney Apr 17, 2026
418cbd7
Improved Syncing UX: Changelogs + Step Summaries (#83)
donald-pinckney Apr 17, 2026
44eba4e
Add .NET SDK support to temporal-developer skill (#39)
donald-pinckney Apr 17, 2026
0843752
Run formatter over .NET (#87)
donald-pinckney Apr 17, 2026
d68413a
Minor fixes to versioning.md (#64)
donald-pinckney Apr 17, 2026
999af78
Update version of temporal-developer skill to 0.3.0 (#88)
donald-pinckney Apr 17, 2026
b4fe783
Change to use the app tokens, so hopefully the sync workflow gets tri…
donald-pinckney Apr 17, 2026
801a48d
Bump version to 0.3.1 in SKILL.md (#90)
donald-pinckney Apr 17, 2026
127d400
merge into 1 workflow (#92)
donald-pinckney Apr 18, 2026
73fc5f0
Improve syncing PR changelogs: include changelog from previous versio…
donald-pinckney Apr 20, 2026
150c733
docs: update go observability reference with up-to-date logging appro…
ptdewey Apr 20, 2026
c98e05a
Update version of temporal-developer skill to 0.3.2 (#94)
donald-pinckney Apr 20, 2026
62957d1
Fix permission for "reading" changelogs (#95)
donald-pinckney Apr 20, 2026
cf34710
Update README to reflect new plugin packaging (#96)
starfleeth Apr 21, 2026
73dee64
Merge remote-tracking branch 'origin/main' into claude/merge-master-u…
claude Apr 25, 2026
e77b3e4
Merge pull request #1 from mesilov/claude/merge-master-update-F6LWh
mesilov Apr 25, 2026
2a1d8b3
Update README.md
mesilov Apr 25, 2026
26955d9
Add Task Queue Priority and Fairness reference (#98)
starfleeth Apr 29, 2026
8d05f55
Add Spring Boot integration reference for Java SDK (#74)
smaldd14 Apr 30, 2026
0e7a312
Small tweak to worker setup wording (#100)
donald-pinckney Apr 30, 2026
6495e59
Cleanup and correct language of workflow initializers (#101)
donald-pinckney Apr 30, 2026
bd513b1
Separate out CLI installation instructions to file (#102)
donald-pinckney Apr 30, 2026
72e67c0
Merge branch 'temporalio:main' into main
mesilov May 9, 2026
812f32e
Add integrations catalog + per-language integrations/ layout (#151)
donald-pinckney May 13, 2026
3c8ed61
Implement planned topic: 0018-spring-ai (#185)
temporal-plugin-updater[bot] May 14, 2026
93a81ac
Implement planned topic: 0028-google-adk (#207)
temporal-plugin-updater[bot] May 15, 2026
43928a1
Implement planned topic: 0030-langgraph-plugin (#212)
temporal-plugin-updater[bot] May 15, 2026
e0c15ae
Implement planned topic: 0031-langsmith-tracing (#217)
temporal-plugin-updater[bot] May 15, 2026
14d412f
Implement planned topic: 0032-workflow-streams (#220)
temporal-plugin-updater[bot] May 15, 2026
8ad8395
Update ai-patterns.md (#226)
donald-pinckney May 15, 2026
7a99afb
Refine Continue-As-New section for clarity and detail (#227)
donald-pinckney May 15, 2026
1783924
Remove early adopter feedback prompt (#228)
donald-pinckney May 15, 2026
60c0178
Bump version from 0.3.2 to 0.4.0 (#229)
donald-pinckney May 15, 2026
77def86
Handle missing tag during skill sync (#230)
donald-pinckney May 15, 2026
8544cc3
Implement planned topic: 0036-openai-agents-sdk (#223)
temporal-plugin-updater[bot] May 20, 2026
d5c47df
Add Ruby SDK support (#41)
donald-pinckney May 28, 2026
d52c54a
Absorb CLI skill: workflow commands, dev server, CLI gotchas (#231)
starfleeth May 29, 2026
351eada
Implement planned topic: 0035-dns-resolver-config (#219)
temporal-plugin-updater[bot] May 29, 2026
3840088
Implement planned topic: 0025-preload-modules (#205)
temporal-plugin-updater[bot] May 29, 2026
16bc571
Release version 0.5.0 of temporal-developer skill (#233)
donald-pinckney May 29, 2026
a2f0903
Update Ruby status to completed in README (#236)
donald-pinckney Jun 1, 2026
5f32b62
Implement planned topic: 0001-standalone-activities (#224)
temporal-plugin-updater[bot] Jun 2, 2026
1c1b6d8
Implement planned topic: 0037-standalone-activities-go (#241)
temporal-plugin-updater[bot] Jun 2, 2026
0a15f21
Implement planned topic: 0009-versioned-continue-as-new (#211)
temporal-plugin-updater[bot] Jun 4, 2026
8cf8a5e
feat: add Temporal Rust SDK references (#235)
wcygan Jun 5, 2026
3973e73
Implement planned topic: 0022-opentelemetry-plugins (#243)
temporal-plugin-updater[bot] Jun 5, 2026
0c48c17
VLN-1526: fix unpinned-github-actions (#251)
picatz Jun 18, 2026
e7b111c
Update README.md (#252)
starfleeth Jun 24, 2026
4f7b146
Use shared package-and-sync reusable workflow (#253)
donald-pinckney Jul 5, 2026
fa142f6
Implement planned topic: 0038-vercel-ai-sdk (#246)
temporal-plugin-updater[bot] Aug 19, 2026
e683784
Implement planned topic: 0041-pydantic-ai (#249)
temporal-plugin-updater[bot] Aug 19, 2026
498c693
Implement planned topic: 0040-mastra (#250)
temporal-plugin-updater[bot] Aug 19, 2026
56cba77
Implement planned topic: 0039-braintrust (#247)
temporal-plugin-updater[bot] Aug 19, 2026
559ec28
Add TypeScript OpenTelemetry integration docs (#245)
donald-pinckney Aug 20, 2026
27b35d9
Fix Python reference guidance from issue #256 (#259)
brianstrauch Aug 20, 2026
67f41f9
Fix .NET worker cancellation example (#260)
brianstrauch Aug 20, 2026
3b191bd
Use env-config for quick-start connections (#261)
brianstrauch Aug 20, 2026
b01c632
Bump temporal-developer skill version to v0.6.0 [skip ci]
github-actions[bot] Aug 20, 2026
5de78ea
Implement planned topic: 0011-external-storage (#209)
temporal-plugin-updater[bot] Aug 24, 2026
49e0c24
Release v0.6.1 (#263)
temporal-plugin-updater[bot] Sep 4, 2026
454fcfe
Restore SKILL.md formatting (#264)
patbeqo Sep 4, 2026
2d7fda3
Release v0.6.2 (#265)
temporal-plugin-updater[bot] Sep 4, 2026
528044e
Merge temporalio/main v0.6.2 and preserve PHP SDK support
mesilov Sep 6, 2026
8d998b8
docs(php): refresh SDK guidance and course references
mesilov Sep 6, 2026
a2197c5
Merge pull request #2 from mesilov/codex/refresh-php-skill
mesilov Sep 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* @temporalio/ai-sdk
30 changes: 30 additions & 0 deletions .github/workflows/package-skill.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# ABOUTME: Packages this skill and syncs it to the plugin repos on version bumps.
# ABOUTME: All logic lives in the shared reusable workflow at temporalio/skill-ci; this is just the caller.
# ABOUTME: Release two ways: (1) run this manually and pick a bump, or (2) edit SKILL.md's version and push.
# ABOUTME: Secrets SKILL_T_DEV_APP_ID / SKILL_T_DEV_KEY / RELEASE_SSH_KEY are inherited (see skill-ci README).

name: Package and Sync Skill

on:
push:
branches: [main]
workflow_dispatch:
inputs:
bump:
description: "Version bump for a one-click release"
type: choice
required: true
default: patch
options: [patch, minor, major]

jobs:
package-and-sync:
uses: temporalio/skill-ci/.github/workflows/package-and-sync.yml@v1
permissions:
contents: write
secrets: inherit
with:
# On workflow_dispatch this is the chosen bump; empty on push events.
bump: ${{ inputs.bump }}
# Override the whitelist only if this skill has extra paths to include:
# includes: "SKILL.md agents references scripts"
21 changes: 21 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2026 Temporal Technologies Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
41 changes: 29 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,43 @@
# Temporal Development Skill

A comprehensive skill for building Temporal applications.
A comprehensive skill for developers to use when building [Temporal](https://temporal.io/) applications.

> We would love to hear your feedback - positive or negative - over in the [Community Slack](https://t.mp/slack), in the [#topic-ai channel](https://temporalio.slack.com/archives/C0818FQPYKY)

## Installation

### As a Claude Code Plugin
### As a Plugin

This skill is packaged as a plugin for major coding agents, which provides a simple way to install and receive future updates:

- **Claude Code**: [temporalio/claude-temporal-plugin](https://github.com/temporalio/claude-temporal-plugin)
- **Cursor**: [temporalio/cursor-temporal-plugin](https://github.com/temporalio/cursor-temporal-plugin)
- **OpenAI Codex**: [temporalio/codex-temporal-plugin](https://github.com/temporalio/codex-temporal-plugin)

See each repo's README for installation instructions.

1. Run `/plugin marketplace add temporalio/agent-skills`
2. Run `/plugin` to open the plugin manager
3. Select **Marketplaces**
4. Choose `temporal-marketplace` from the list
5. Select **Enable auto-update** or **Disable auto-update**
6. run `/plugin install temporal-developer@temporalio-agent-skills`
7. Restart Claude Code
### Standalone Installation

### Via `npx skills` - supports all major coding agents
If you prefer to install the skill directly without the plugin wrapper:

#### Via `npx skills` — supports all major coding agents

1. `npx skills add temporalio/skill-temporal-developer`
2. Follow prompts

### Via manually cloning the skill repo:
#### Via manually cloning the skill repo

1. `mkdir -p ~/.claude/skills && git clone https://github.com/temporalio/skill-temporal-developer ~/.claude/skills/temporal-developer`

Appropriately adjust the installation directory based on your coding agent.
Appropriately adjust the installation directory based on your coding agent.

## Currently Supported Temporal SDK Languages

- [x] Python ✅
- [x] TypeScript ✅
- [x] Go ✅
- [x] Java ✅
- [x] .NET ✅
- [x] Rust (Public Preview)
- [x] Ruby ✅
- [x] PHP ✅
115 changes: 45 additions & 70 deletions SKILL.md
Original file line number Diff line number Diff line change
@@ -1,42 +1,29 @@
---
name: temporal-developer
description: This skill should be used when the user asks to "create a Temporal workflow", "write a Temporal activity", "debug stuck workflow", "fix non-determinism error", "Temporal Python", "Temporal TypeScript", "Temporal PHP", "workflow replay", "activity timeout", "signal workflow", "query workflow", "worker not starting", "activity keeps retrying", "Temporal heartbeat", "continue-as-new", "child workflow", "saga pattern", "workflow versioning", "durable execution", "reliable distributed systems", or mentions Temporal SDK development.
version: 1.0.0
description: Develop, debug, and manage Temporal applications across Python, TypeScript, Go, Java, .NET, Ruby, Rust, and PHP. Use when the user is building workflows, activities, or workers with a Temporal SDK, debugging issues like non-determinism errors, stuck workflows, or activity retries, using Temporal CLI, Temporal Server, or Temporal Cloud, or working with durable execution concepts like signals, queries, heartbeats, versioning, continue-as-new, child workflows, or saga patterns. Also use when the user mentions "run a Temporal workflow from the CLI", "start a dev server", "run temporal server start-dev", "temporal workflow start", "temporal workflow execute", "temporal workflow signal", "temporal workflow query", "temporal workflow update".
version: 0.6.2
---

# Skill: temporal-developer

## Overview

Temporal is a durable execution platform that makes workflows survive failures automatically. This skill provides guidance for building Temporal applications in Python, TypeScript, and PHP.
Temporal is a durable execution platform that makes workflows survive failures automatically. This skill provides guidance for building Temporal applications in Python, TypeScript, Go, Java, .NET, Ruby, Rust, and PHP.

## Core Architecture

```
┌─────────────────────────────────────────────────────────────────┐
│ Temporal Cluster │
│ ┌─────────────────┐ ┌─────────────────┐ ┌────────────────┐ │
│ │ Event History │ │ Task Queues │ │ Visibility │ │
│ │ (Durable Log) │ │ (Work Router) │ │ (Search) │ │
│ └─────────────────┘ └─────────────────┘ └────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
│ Poll / Complete
┌─────────────────────────────────────────────────────────────────┐
│ Worker │
│ ┌─────────────────────────┐ ┌──────────────────────────────┐ │
│ │ Workflow Definitions │ │ Activity Implementations │ │
│ │ (Deterministic) │ │ (Non-deterministic OK) │ │
│ └─────────────────────────┘ └──────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
```

**Components:**
- **Workflows** - Durable, deterministic functions that orchestrate activities
- **Activities** - Non-deterministic operations (API calls, I/O) that can fail and retry
- **Workers** - Long-running processes that poll task queues and execute code
- **Task Queues** - Named queues connecting clients to workers
The **Temporal Cluster** is the central orchestration backend. It maintains three key subsystems: the **Event History** (a durable log of all workflow state), **Task Queues** (which route work to the right workers), and a **Visibility** store (for searching and listing workflows). There are three ways to run a Cluster:

- **Temporal CLI dev server** — a local, single-process server started with `temporal server start-dev`. Suitable for development and testing only, not production.
- **Self-hosted** — you deploy and manage the Temporal server and its dependencies (e.g., database) in your own infrastructure for production use.
- **Temporal Cloud** — a fully managed production service operated by Temporal. No cluster infrastructure to manage.

**Workers** are long-running processes that you run and manage. They poll Task Queues for work and execute your code. You might run a single Worker process on one machine during development, or run many Worker processes across a large fleet of machines in production. Each Worker hosts two types of code:

- **Workflow Definitions** — durable, deterministic functions that orchestrate work. These must not have side effects.
- **Activity Implementations** — non-deterministic operations (API calls, file I/O, etc.) that can fail and be retried.

Workers communicate with the Cluster via a poll/complete loop: they poll a Task Queue for tasks, execute the corresponding Workflow or Activity code, and report results back.

## History Replay: Why Determinism Matters

Expand All @@ -61,71 +48,59 @@ See `references/core/determinism.md` for detailed explanation.

### Ensure Temporal CLI is installed

Check if `temporal` CLI is installed. If not, follow these instructions:

#### macOS

```
brew install temporal
```

#### Linux

Check your machine's architecture and download the appropriate archive:

- [Linux amd64](https://temporal.download/cli/archive/latest?platform=linux&arch=amd64)
- [Linux arm64](https://temporal.download/cli/archive/latest?platform=linux&arch=arm64)

Once you've downloaded the file, extract the downloaded archive and add the temporal binary to your PATH by copying it to a directory like /usr/local/bin

#### Windows

Check your machine's architecture and download the appropriate archive:

- [Windows amd64](https://temporal.download/cli/archive/latest?platform=windows&arch=amd64)
- [Windows arm64](https://temporal.download/cli/archive/latest?platform=windows&arch=arm64)

Once you've downloaded the file, extract the downloaded archive and add the temporal.exe binary to your PATH.
Check if `temporal` CLI is installed. If not, follow the instructions at `references/core/install_cli.md` to install it for your platform.

### Read All Relevant References

1. First, read the getting started guide for the language you are working in:
- Python -> read `references/python/python.md`
- TypeScript -> read `references/typescript/typescript.md`
- PHP -> read `references/php/php.md`
- Python -> read `references/python/python.md`
- TypeScript -> read `references/typescript/typescript.md`
- Go -> read `references/go/go.md`
- Java -> read `references/java/java.md`
- .NET (C#) -> read `references/dotnet/dotnet.md`
- Ruby -> read `references/ruby/ruby.md`
- Rust -> read `references/rust/rust.md` (in Public Preview)
- PHP -> read `references/php/php.md`; it routes to RoadRunner operations, Laravel/support integrations, and a reviewed PHP course/source map
2. Second, read appropriate `core` and language-specific references for the task at hand.


## Primary References

- **`references/core/determinism.md`** - Why determinism matters, replay mechanics, basic concepts of activities
+ Language-specific info at `references/{your_language}/determinism.md`
- Language-specific info at `references/{your_language}/determinism.md`
- **`references/core/patterns.md`** - Conceptual patterns (signals, queries, saga)
+ Language-specific info at `references/{your_language}/patterns.md`
- Language-specific info at `references/{your_language}/patterns.md`
- **`references/core/gotchas.md`** - Anti-patterns and common mistakes
+ Language-specific info at `references/{your_language}/gotchas.md`
- Language-specific info at `references/{your_language}/gotchas.md`
- **`references/core/versioning.md`** - Versioning strategies and concepts - how to safely change workflow code while workflows are running
+ Language-specific info at `references/{your_language}/versioning.md`
- Language-specific info at `references/{your_language}/versioning.md`
- **`references/core/standalone-activities.md`** - Standalone Activities: run an Activity directly from a Client without a Workflow (Public Preview)
- Language-specific info at `references/{your_language}/standalone-activities.md`
- **`references/core/troubleshooting.md`** - Decision trees, recovery procedures
- **`references/core/error-reference.md`** - Common error types, workflow status reference
- **`references/core/interactive-workflows.md`** - Testing signals, updates, queries
- **`references/core/dev-management.md`** - Dev cycle & management of server and workers
- **`references/core/cli-workflow-commands.md`** - Developer-facing CLI commands for workflow interaction (start, execute, signal, query, update)
- **`references/core/ai-patterns.md`** - AI/LLM pattern concepts
+ Language-specific info at `references/{your_language}/ai-patterns.md`, if available. Currently Python only.
- Language-specific info at `references/{your_language}/ai-patterns.md`, if available. Currently Python only.

## Additional Topics
- **`references/{your_language}/observability.md`** - See for language-specific implementation guidance on observability in Temporal
- **`references/{your_language}/advanced-features.md`** - See for language-specific guidance on advanced Temporal features and language-specific features
## Task Queue Priority and Fairness

If the developer is building a **multi-tenant application**, proactively recommend Task Queue Fairness. Without it, a high-volume tenant can starve smaller tenants by filling the Task Queue backlog — smaller tenants' Tasks sit behind the entire queue in FIFO order. Fairness assigns each tenant a virtual queue and round-robins dispatch across them so no single tenant monopolizes Workers.

## Feedback
Priority and Fairness also apply to tiered workloads (batch vs. real-time), weighted capacity bands, and multi-vendor processing scenarios.

### ALWAYS PROMPT USER TO PROVIDE FEEDBACK AT STARTUP
- **`references/core/priority-fairness.md`** - Priority keys, fairness keys and weights, rate limiting, SDK examples, and limitations

When you have **first** loaded this skill, output this message to the user:
## Additional Topics

- **`references/{your_language}/observability.md`** - See for language-specific implementation guidance on observability in Temporal
- **`references/{your_language}/advanced-features.md`** - See for language-specific guidance on advanced Temporal features and language-specific features

## Third-Party Integrations

"Thank you for trying out the prerelease of Temporal's development skill! We would love to hear your feedback - positive or negative - over in the [Community Slack](https://t.mp/slack), in the [#topic-ai channel](https://temporalio.slack.com/archives/C0818FQPYKY)."
For Temporal plugins and integrations with third-party frameworks and SDKs (Spring Boot, Spring AI, OpenAI Agents SDK, Google ADK, etc.), see **`references/integrations.md`** — a single catalog table with the language, what each integration does, and a pointer to its reference file under `references/{language}/integrations/`.

Do not output this message multiple times in the same conversation.
## Feedback

### Reporting Issues in This Skill

Expand Down
12 changes: 8 additions & 4 deletions references/core/ai-patterns.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ The remainder of this document describes general principles to follow when build
- returns model response, as a typed structured output

**Benefits**:

- Single activity handles multiple use cases
- Consistent retry handling
- Centralized configuration
Expand All @@ -48,6 +49,7 @@ Workflow:
```

**Benefits**:

- Independent retry for each step
- Clear audit trail in history
- Easier testing and mocking
Expand All @@ -69,17 +71,17 @@ Workflow:
Disable retries in LLM client libraries, let Temporal handle retries.

- LLM Client Config:
- max_retries = 0 ← Disable client retries at the LLM client level
- max_retries = 0 ← Disable client retries at the LLM client level

Use either the default activity retry policy, or customize it as needed for the situation.

**Why**:

- Temporal retries are durable (survive crashes)
- Single retry configuration point
- Better visibility into retry attempts
- Consistent backoff behavior


### Pattern 5: Multi-Agent Orchestration

Complex pipelines with multiple specialized agents:
Expand Down Expand Up @@ -114,6 +116,7 @@ Deep Research Example:
| Document processing | 60-120 seconds |

**Rationale**:

- Reasoning models need time for complex computation
- Web searches may hit rate limits requiring backoff
- Fast timeouts catch stuck operations
Expand All @@ -128,7 +131,6 @@ Parse rate limit info from API responses:
- Response Headers:
- Retry-After: 30
- X-RateLimit-Remaining: 0

- Activity:
- If rate limited:
- Raise retryable error with a next retry delay
Expand All @@ -137,12 +139,14 @@ Parse rate limit info from API responses:
## Error Handling

### Retryable Errors

- Rate limits (429)
- Timeouts
- Temporary server errors (500, 502, 503)
- Network errors

### Non-Retryable Errors

- Invalid API key (401)
- Invalid input/prompt
- Content policy violations
Expand All @@ -161,6 +165,6 @@ Parse rate limit info from API responses:
## Observability

See `references/{your_language}/observability.md` for the language you are working in for documentation on implementing observability in Temporal. It is generally recommended to add observability for:

- Token usage, via activity logging
- any else to help track LLM usage and debug agentic flows, within moderation.

Loading