# pydantic-deepagents

> Python Deep Agent framework built on top of Pydantic-AI, designed to help you quickly build production-grade autonomous AI agents with planning, filesystem operations, subagent delegation, skills, and

- **URL**: https://www.freshcrate.ai/projects/pydantic-deepagents
- **Author**: vstorm-co
- **Category**: MCP Servers
- **Latest version**: `0.3.24` (2026-06-01)
- **License**: MIT
- **Source**: https://github.com/vstorm-co/pydantic-deepagents
- **Homepage**: https://vstorm-co.github.io/pydantic-deepagents/
- **Language**: Python
- **GitHub**: 707 stars, 76 forks
- **Registry**: github
- **Tags**: `agent-framework`, `anthropic`, `artificial-intelligence`, `business-intelligence`, `chatgpt`, `clawdbot`, `enterprise`, `framework`, `python`

## Description

Python Deep Agent framework built on top of Pydantic-AI, designed to help you quickly build production-grade autonomous AI agents with planning, filesystem operations, subagent delegation, skills, and structured outputs—in just 10 lines of code.

## Recent releases

| Version | Date | Urgency | Changes |
| --- | --- | --- | --- |
| `0.3.24` | 2026-06-01 | High | ## [0.3.24] - 2026-06-01  ### Fixed  - **Branch cost no longer drops off freshly mounted fork-tab chips** (`apps/cli/widgets/fork_tabs.py`). `ForkTabsWidget.watch_statuses` mounts chips asynchronously (`await self.mount(...)`), so when the poll loop sets `statuses` then `branch_costs` in the same tick, `watch_branch_costs`'s single `call_after_refresh` pass could fire before a chip's mount completed and the `$x.xx` cost never landed — surfacing as a flaky full-suite test failure. Costs are n |
| `0.3.22` | 2026-05-24 | High | ## [0.3.22] - 2026-05-24  ### Fixed  - **`AttributeError: 'LocalBackend' object has no attribute '_read_bytes'` at toolset `get_instructions()` time** ([#118](https://github.com/vstorm-co/pydantic-deepagents/pull/118), independently authored by [@mcauthorn](https://github.com/mcauthorn) in [#119](https://github.com/vstorm-co/pydantic-deepagents/pull/119)). `pydantic-ai-backend 0.2.8` promoted the bytes-read entry point on `BackendProtocol` from private `_read_bytes` to public `read_bytes` an |
| `0.3.19` | 2026-05-14 | High | ## [0.3.19] - 2026-05-14  ### Added  - **`PeriodicReminderCapability` — periodic task reminders for long agent runs** ([#94](https://github.com/vstorm-co/pydantic-deepagents/pull/94)) — injects a "what are you supposed to be doing" reminder into the message history every N model-request turns to prevent agent drift on long, tool-heavy runs. Uses `before_model_request` and per-run state isolation via `for_run()`.   - Four CLI modes via a new `/remind` command: `off`, `first` (zero-cost — re- |
| `0.3.18` | 2026-05-05 | High | ## [0.3.18] - 2026-05-05  ### Fixed  - **`EvictionCapability` dropped `BinaryContent` (e.g. screenshots) from `ToolReturn` results** — previously, any `ToolReturn(return_value=..., content=[..., BinaryContent(...)])` was collapsed into a plain string before the size check, so the multimodal `content` (images, audio, PDFs) was silently discarded along with a text eviction message. The capability now only measures and evicts `return_value`; the `content` list and `metadata` are always preserve |
| `0.3.17` | 2026-04-22 | High | ## [0.3.17] - 2026-04-22  ### Added  - **`LiteparseToolset` — document parsing via [LiteParse](https://github.com/run-llama/liteparse)**   - New toolset at `pydantic_deep.toolsets.liteparse`   - Tools: `parse_document` (text extraction) and `screenshot_document` (per-page images)   - Reads files from any backend as bytes — works with `StateBackend`, `LocalBackend`, `DockerSandbox`   - Optional OCR via built-in Tesseract or pluggable HTTP server (PaddleOCR, EasyOCR)   - Lazy parser initi |
| `0.3.15` | 2026-04-17 | High | ## [0.3.15] - 2026-04-17  ### Fixed  - **`PatchToolCallsCapability` caused `ValidationException: duplicate Ids` on Bedrock when tools raised `ModelRetry`** — when a tool raised `ModelRetry`, pydantic-ai records the retry as a `RetryPromptPart` (carrying the original `tool_call_id`) on the following `ModelRequest`, not as a `ToolReturnPart`. The patch processor only scanned for `ToolReturnPart` when deciding whether a `ToolCallPart` was orphaned, so it injected a synthetic `ToolReturnPart` wi |
| `0.3.14` | 2026-04-16 | High | ## [0.3.14] - 2026-04-16  ### Fixed  - **Subagents ignored parent `web_search`/`web_fetch` settings** — the default subagent factory in `create_deep_agent` hardcoded `web_search=True` and `web_fetch=True`, overriding the parent agent's configuration. On Bedrock and Vertex Anthropic models this produced a 400 error (`web_fetch_20250910` not accepted), because the beta web tools are not supported there. The factory now propagates the parent agent's `web_search` and `web_fetch` flags to spawned |
| `0.3.13` | 2026-04-13 | High | ## [0.3.13] - 2026-04-13  ### Fixed  - **User-provided tools lost metadata when passed via `tools=` parameter** — tools registered through `create_deep_agent(tools=[...])` were previously added via `agent.tool(tool.function)` after construction, which hardcoded `takes_ctx=True` and discarded all `Tool`-level metadata (`name`, `description`, `prepare`, `max_retries`, `requires_approval`, `timeout`). Tools are now passed directly to the `Agent` constructor, preserving all metadata and correctl |
| `0.3.12` | 2026-04-13 | Medium | ## [0.3.12] - 2026-04-13  ### Added  - **Bandit security scanner** — [Bandit](https://bandit.readthedocs.io/) is now part of the development toolchain and CI pipeline. It runs on every commit via the new `security` job in GitHub Actions and is also available locally via `make security`. The scanner checks production code (`pydantic_deep/`) for common Python security vulnerabilities (CWE-listed issues). No medium- or high-severity findings block a merge. - **GitHub Issue Templates** — struct |
| `0.3.11` | 2026-04-13 | Medium | ## [0.3.11] - 2026-04-13  ### Fixed  - **Browser opens on every message (`BrowserCapability`)** — `async_playwright()` was entered eagerly   at the start of `wrap_run`, spawning the Playwright Node.js driver process (which in turn opened a   browser window) on every agent run — even when no browser tool was ever called. The Playwright context   manager is now entered lazily inside the first-tool-call launcher, so runs that never use the browser   incur zero Playwright overhead and no bro |

## Citation

- HTML: https://www.freshcrate.ai/projects/pydantic-deepagents
- Markdown: https://www.freshcrate.ai/projects/pydantic-deepagents.md
- Dependencies JSON: https://www.freshcrate.ai/api/projects/pydantic-deepagents/deps

_Generated by freshcrate.ai. Indexes github releases for AI-agent ecosystem packages._
