v2.53.0
stackblitz-labs/bolt.diyv2.53.0Oct 2, 2026by dsfaccini
Upgrading?
AI Summary
A security patch for a concurrency limiter vulnerability is the primary highlight, accompanied by significant new features for CLAI2 including built-in plugins and observability.
Key Highlights
- Security fix for ConcurrencyLimitedModel (GHSA-6fqq-452j-qhrp)
- New built-in plugins (Linear, Grain, PostHog)
- Logfire UI telemetry and setup menu
- Managed subagents in CLAI2
Breaking Changes
- Concurrency limiter sharing behavior changed to raise UserError
- SubAgents agent_folders default-change warning dropped
New Features
- Built-in Linear plugin
- Built-in Grain plugin
- Logfire UI telemetry
- Managed subagents
- Codex-only `/fast` command
Full Release Notes
<!-- Release notes generated using configuration in .github/release.yml at main --> ### 🛡️ Security This release fixes one security issue in `ConcurrencyLimitedModel`. See the advisory for full details and affected versions. - **[GHSA-6fqq-452j-qhrp](https://github.com/pydantic/pydantic-ai/security/advisories/GHSA-6fqq-452j-qhrp)** (high): a streamed request through `ConcurrencyLimitedModel` or `limit_model_concurrency` could keep its concurrency slot when the slot was released on a different task than the one that acquired it: after an early exit (the consumer stopped iterating, raised, or was cancelled), and also after fully consuming `stream_text()` with its default debouncing. Repeated streams could then block every request sharing the limiter. Agent-level `max_concurrency` and non-streaming requests are not affected. Reported by @lche511. (#9478) The fix also changes how limiters are shared: a model wrapper now raises `UserError` when it shares a limiter with the agent making the request or with an enclosing model wrapper, `ConcurrencyLimiter.acquire()` takes a slot on every call, even on the same task, and a custom `AbstractConcurrencyLimiter` must allow `release()` from another task. Patched in `2.53.0`. v1 is not affected. ## What's Changed ### ⚠️ Compatibility Notes * Add `oneOf` schema support to `TestModel`'s generated data by [@pydanty](https://github.com/apps/pydanty) in https://github.com/pydantic/pydantic-ai/pull/8783 * Make `clai2` plugins declarative `Plugin` subclasses, modeled on `AbstractCapability` by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/9493 * Move session naming into `clai2` and deprecate `pydantic_ai_harness.step_persistence.naming` by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/9499 ### 🚀 Features * Add a built-in `posthog` plugin to `pydantic-clai2` with `/keys` or browser sign-in by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/8901 * Add a built-in `grain` plugin to `clai2` with a keyring-backed Grain sign-in by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/8905 * Add a built-in `linear` plugin to `clai2` with a settings menu and `/keys` credentials by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/8949 * Count Google grounding web search queries in `usage` by [@pydanty](https://github.com/apps/pydanty) in https://github.com/pydantic/pydantic-ai/pull/8891 * Add `AbsurdDurability` to the harness as a replacement for `pydantic-ai-absurd` by @adtyavrdhn in https://github.com/pydantic/pydantic-ai/pull/8946 * Let CLAI2 plugins run models under their own prefix with `host.model_provider` by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/9468 * Apply theme-aware accents to the `clai2` status row by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/9473 * Add opt-in Logfire UI telemetry and a Logfire setup menu (region, sign-in, project) to `pydantic-clai2` by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/9467 * Add an opt-in herdr plugin for `clai2` by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/9480 * Let `AskUser` defer questions to the host and time out a slow answerer by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/9509 * Add a Codex-only `/fast` command to CLAI2 by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/9518 * Let /login take a provider name, and let plugins add their own sign-ins by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/9485 * Add `SystemOneModel` to run decision models such as CLM and Laya over the `/v1/systemone` API by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/8942 * CLAI2: plugin logins add their models; plugin models can use a provider's /model_settings controls by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/9558 * Rename the CLAI `logfire` plugin to `observability` by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/9566 * Add `ToolCallJudge` to assess tool calls before execution by @DouweM in https://github.com/pydantic/pydantic-ai/pull/9041 * Add managed subagents to CLAI2, with Claude and Codex agent definitions in Harness by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/9573 * Add a settings menu to CLAI2's built-in `observability` (Logfire) plugin by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/9306 * CLAI2: `/update` with stable (PyPI) and bleeding (`main`) channels by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/9576 * Make the CLAI2 `/plugins` menu themed and readable, with plugin descriptions by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/9570 * Send images and documents from GPT-Live tool results to the delegated backend by @DouweM in https://github.com/pydantic/pydantic-ai/pull/9048 * Tag `clai2` plugin settings with the features they need, and skip a plugin capability that rejects its settings at run setup by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/9569 * Show compact used/max context in the CLAI2 status line by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/9583 * Expose the message-history repair pipeline as `repair_messages` by @DouweM in https://github.com/pydantic/pydantic-ai/pull/8370 ### 🐛 Bug Fixes * Kill the process group when a `LocalWorkspaceBackend.run` timeout fires during process startup by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/9358 * Ask for CLAI2 keychain access once per session by encrypting credentials with one keyring-held key by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/9465 * Name CLAI2 worktree branches `clai-NAME` and reopen existing worktrees with `--worktree NAME` by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/9462 * Avoid invalid-escape warning floods during `CodeMode` analysis by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/9475 * Group `clai2` resume sessions by repository identity by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/9482 * Create the CLAI2 plugins folder at startup by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/9484 * Keep the registered `Memory` toolset across runs so durable execution accepts it by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/9489 * Keep the registered `Planning` toolset across runs so durable execution accepts it by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/9507 * Keep planted files from escaping `BubblewrapSandbox` on the next launch by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/9457 * Render non-finite eval metrics as `inf`/`-inf`/`nan` by [@pydanty](https://github.com/apps/pydanty) in https://github.com/pydantic/pydantic-ai/pull/8852 * Snap `gemini-3.1-flash-image` thinking efforts to `minimal` and `high` on the Gemini API by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/9515 * Raise `UnexpectedModelBehavior` instead of running the wrong tool when function tool calls share a `tool_call_id` by [@pydanty](https://github.com/apps/pydanty) in https://github.com/pydantic/pydantic-ai/pull/8782 * Explain that CLAI2 needs a restart when `/reload` hits a stale Harness import by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/9571 * Build one streamed `XaiModel` thinking part per output, matching the non-streamed response by @DouweM in https://github.com/pydantic/pydantic-ai/pull/9416 * Leave image generation calls out of the `OpenAIResponsesModel` replay when `openai_store=False` by @DouweM in https://github.com/pydantic/pydantic-ai/pull/9388 * Build the same `ModelResponse` from streamed and complete `OpenAIChatModel` and `OpenRouterModel` responses by @DouweM in https://github.com/pydantic/pydantic-ai/pull/9418 * Make `OpenAIResponsesModel` build the same `ModelResponse` from a stream as from a complete response by @DouweM in https://github.com/pydantic/pydantic-ai/pull/9417 * Make xAI push-to-talk reply only when asked: `commit_audio()` alone no longer triggers a reply, and `create_response()` is always answered by @DouweM in https://github.com/pydantic/pydantic-ai/pull/9070 * Tolerate OpenAI realtime `status`, `status_details` and session values the SDK does not know yet by @DouweM in https://github.com/pydantic/pydantic-ai/pull/9392 * Stop `SubAgents` from forcing `thinking` on disk agents by @DouweM in https://github.com/pydantic/pydantic-ai/pull/9384 * Restore `DynamicWorkflow` reveal announcements after compaction or history loss by @DouweM in https://github.com/pydantic/pydantic-ai/pull/9371 * Preserve free-text focus in CLAI2 `/compact` by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/9587 * Make Logfire Temporal spans replay-safe by @DouweM in https://github.com/pydantic/pydantic-ai/pull/7006 * Keep the launch-directory workspace in `clai2` when capability functions supply none, and expose `unrestricted_filesystem` in `/plugins configure coder` by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/9593 * Allow unschemable types in the derived Temporal `ActivityConfig` schema by [@pydanty](https://github.com/apps/pydanty) in https://github.com/pydantic/pydantic-ai/pull/9577 * Let `GoogleRealtimeModel` declare tools whose `dict` values are recursive models by @dsfaccini in https://github.com/pydantic/pydantic-ai/pull/9607 ### 📦 Dependencies * Bump CLAI2 to `termflow-md` 0.11.0 by @mpfaffenberger in https://github.com/pydantic/pydantic-ai/pull/9483 ## New Contributors * @Poojita060926 made their first contribution in https://github.com/pydantic/pydantic-ai/pull/8900 **Full Changelog**: https://github.com/pydantic/pydantic-ai/compare/v2.52.0...v2.53.0
Related Repositories
openclaw/openclaw★ 392,690
The AI that really does things. Any OS. Any Platform. The lobster way. 🦞
nilbuild/developer-roadmap★ 370,064
Interactive roadmaps, guides and other educational content to help developers grow in their careers.
morluto/rea★ 357,509
Reverse engineer anything with agents, from app behavior down to native binaries.
anomalyco/opencode★ 219,654
The open source coding agent.
n8n-io/n8n★ 208,248
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.