# Agents SDK Gets Pi 1.5: From 88 to 459 Agent Runs per Second

Hi everyone, Shii-chan here! Cloudflare's Agents SDK just got a sizable performance boost, so let's take a look!

## What was announced?

In the Cloudflare Changelog, Agents SDK v0.33.0 upgrades PiHarness to Pi 1.5.

There are two big parts: performance improvements around streaming, and updates to the session APIs.

## The story so far

Until now, Pi wrote streamed answers and tool output to storage on every single update.

- Persisting on each update meant long answers piled up storage transactions
- The scheduler rechecked every conversation on each commit
- Streaming a large tool call copied all the text again whenever new text arrived

## What changes

Here are the numbers from the original post:

- Storage writes: answers and tool output are now persisted in batches, within about a second of each update. Over SQLite, transactions drop by about 27x for long answers and 5.7x for turns with parallel tools, and CPU drops by about a quarter
- Throughput across sessions: the scheduler no longer rechecks every conversation. In a SQLite benchmark with 2,048 sessions, one Pi harness went from 88 to 459 agent runs per second
- Memory: streaming a 500 KB tool call used to take about 20 seconds of CPU and a 100 MB heap. Pi now appends new text instead

Streaming updates are still visible immediately. But because persistence is batched, a crash with the default settings can lose up to about one second of streamed progress. You can configure this interval in the Recovery docs.

## Dive Deep

Let's go through the API changes too.

- `session.watch()`: replaces `session.events()`. It returns the newest transcript entries plus live state, such as the answer being streamed, running tools, and why the last run ended without an answer
- `session.continue()`: starts a new run from the existing transcript without adding a message. Use it after a model error or when a run hits its turn limit. The session must be idle, and if the transcript already ends in an answer it returns `unanswered` with the reason `nothing_to_answer`
- `retry()` and the `parked` status: removed. Tasks that hit their restart limit now end instead of being parked
- `defaults.maxTurns`: caps the tool rounds a run can take in new sessions
- Code mode: scripts can call `browserTool` and pass its screenshots to `image()`. `browserTool` also stops when the harness aborts its call

A few upgrade notes:

- Conversations run on Pi 1.5 can't be read by Pi 1.4, so if something goes wrong, roll forward rather than back
- Replace `session.events()` with `session.watch()`, and remove uses of `retry()` and the `parked` status
- The Pi Durable 1.5.0 changelog lists the breaking changes, and the Agents SDK v0.33.0 changelog has the upgrade steps

## Wrap-up

- Agents SDK v0.33.0 moves PiHarness to Pi 1.5
- Batched persistence cuts storage transactions by about 27x and 5.7x, and CPU by about a quarter
- 2,048 sessions go from 88 to 459 runs per second, and large tool calls use far less memory
- `session.watch()` and `session.continue()` are new, while `retry()` and `parked` are gone
- There is no rollback to Pi 1.4, so plan to move forward

This one is especially for anyone running lots of agent sessions on Cloudflare!
