You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Replaced `include_general_purpose_subagent` with `include_builtin_subagents` — adds a built-in "research" deep agent (filesystem + web + memory) instead of a plain pydantic-ai Agent
14
+
-**Subagents are now deep agents by default** — all subagents (built-in and custom) are created via `create_deep_agent()` with filesystem, web, memory, eviction, and patch support. Custom subagents that don't specify `agent` or `agent_factory` automatically get the deep agent factory
15
+
- Removed `skills` parameter from `create_deep_agent()` — pass pre-loaded skills via `SkillsToolset(skills=[...])` in the `toolsets` parameter instead
16
+
- Removed `image_support` parameter from `create_deep_agent()` — image support is now always enabled (multimodal `read_file` for `.png`, `.jpg`, `.gif`, `.webp`)
17
+
- Changed `include_memory` default from `False` to `True` — persistent agent memory is now enabled by default
18
+
- Changed `max_nesting_depth` default from `0` to `1` — subagents can now spawn their own subagents by default
19
+
- Simplified context file discovery to `AGENTS.md` and `SOUL.md` only (removed DEEP.md, AGENT.md, CLAUDE.md). Subagents see only `AGENTS.md`; `SOUL.md` is main-agent-only
20
+
- Replaced `include_web` with separate `web_search` and `web_fetch` parameters (both default `True`) — allows independent control of WebSearch and WebFetch capabilities
21
+
- Added `thinking` parameter (default `"high"`) — enables model thinking/reasoning via pydantic-ai `Thinking` capability. Supports `True`/`False`/`"minimal"`/`"low"`/`"medium"`/`"high"`/`"xhigh"`
22
+
- Changed `eviction_token_limit` default from `None` to `20_000` — large tool outputs automatically saved to files
23
+
- Changed `patch_tool_calls` default from `False` to `True` — orphaned tool calls fixed automatically
24
+
-`BASE_PROMPT` is now always included in system prompt — `instructions` parameter appends to it instead of replacing it
25
+
- Moved `model_settings` parameter next to `model` in `create_deep_agent()` signature
26
+
27
+
### Added
28
+
29
+
- 5 new hook events: `BEFORE_RUN`, `AFTER_RUN`, `RUN_ERROR`, `BEFORE_MODEL_REQUEST`, `AFTER_MODEL_REQUEST` — maps to pydantic-ai lifecycle hooks for session tracking, LLM call logging, and error alerts
30
+
-`compact_conversation` tool — agent can manually trigger context compression with optional focus topic (uses `ContextManagerCapability.request_compact()`)
31
+
- Anthropic prompt caching enabled by default (`anthropic_cache_instructions`, `anthropic_cache_tool_definitions`, `anthropic_cache_messages`) — silently ignored by non-Anthropic models
32
+
- Built-in "research" subagent (`pydantic_deep/subagents.py`) — full deep agent for codebase exploration and web research
33
+
-`upload_files()` batch method on `DeepAgentDeps` for uploading multiple files at once
34
+
-`approve_tools` config in CLI — configure which tools require user approval (default: `["execute"]`). Set via `/config set approve_tools "execute,write_file,edit_file"` or in `config.toml`
35
+
- Skills as slash commands in CLI — type `/code-review` to activate a skill directly from the picker
36
+
- 3-tier skill discovery: built-in (`apps/cli/skills/`) → user (`~/.pydantic-deep/skills/`) → project (`.pydantic-deep/skills/`), with later sources overriding earlier by name
37
+
- Provider setup wizard in CLI — first-run auto-detects missing API keys and guides through provider selection (Anthropic, OpenAI, Google, OpenRouter) with key input. Keys saved to `.pydantic-deep/.env`
38
+
-`/provider` slash command — switch AI provider and model mid-session
39
+
-`/config` slash command in CLI — view and change settings interactively (e.g., `/config set include_teams true`)
40
+
-`web_search`, `web_fetch`, `thinking_effort`, and `include_teams` as configurable options in `config.toml`
41
+
- ACP (Agent Client Protocol) adapter in `apps/acp/` — enables pydantic-deep agents to run inside editors like Zed. Streaming text deltas, tool call visibility with arguments and results, model switching, session management, auto-detect provider from API keys
42
+
- Enhanced `BASE_PROMPT` with Claude Code-inspired sections: code quality, executing actions with care, tone and formatting
43
+
- MCP documentation (`docs/advanced/mcp.md`) — shows how to use pydantic-ai's `MCP` capability with deep agents
44
+
- Documentation for `BackendSkillsDirectory` in `docs/concepts/skills.md` — covers usage with `StateBackend`, `LocalBackend`, `DockerSandbox`, and mixed configurations
45
+
- Cross-reference to backend-aware skills in `docs/concepts/backends.md`
46
+
47
+
### Fixed
48
+
49
+
- CLI bundled skills fallback path — was resolving to non-existent `apps/pydantic_deep/bundled_skills`, now correctly points to `apps/cli/skills/`
50
+
8
51
## [0.3.2] - 2026-03-31
9
52
10
53
### Added
@@ -103,7 +146,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
103
146
### Fixed
104
147
105
148
-**`deps.todos` not synchronized with todo tools** — `create_todo_toolset()` was called without `storage=` parameter, creating an isolated `TodoStorage` disconnected from `deps.todos`. Todo tools wrote to their own internal list while `deps.todos`, `get_todo_prompt()`, and `share_todos` remained empty. Fixed with `_DepsTodoProxy` pattern that delegates reads/writes to `deps.todos` at runtime. Subagent todo toolsets use the same proxy pattern for consistency. ([#35](https://github.com/vstorm-co/pydantic-deepagents/issues/35))
106
-
-**`Model` objects discarded for subagents** — `isinstance(model, str)` guard silently replaced `Model` objects (e.g. `TestModel()`, `AnthropicModel()`) with `DEFAULT_MODEL`. Subagents always used `openai:gpt-4.1` regardless of the model passed to `create_deep_agent()`. Changed to `model or DEFAULT_MODEL`. ([#34](https://github.com/vstorm-co/pydantic-deepagents/pull/34), by [@ret2libc](https://github.com/ret2libc))
149
+
-**`Model` objects discarded for subagents** — `isinstance(model, str)` guard silently replaced `Model` objects (e.g. `TestModel()`, `AnthropicModel()`) with `DEFAULT_MODEL`. Subagents always used `anthropic:claude-sonnet-4-6` regardless of the model passed to `create_deep_agent()`. Changed to `model or DEFAULT_MODEL`. ([#34](https://github.com/vstorm-co/pydantic-deepagents/pull/34), by [@ret2libc](https://github.com/ret2libc))
107
150
-**Binary file upload tests flaky on Linux** — `chardet` detected encoding for small byte sequences on Linux but not macOS, causing `line_count` assertions to fail in CI. Tests now mock `chardet.detect` for deterministic behavior.
108
151
109
152
### Changed
@@ -250,7 +293,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
250
293
- Fixed `CLAUDE.md` - corrected `CompositeBackend` API signature (uses `default` and `routes`, not `backends`)
251
294
- Fixed `README.md` - corrected import path `pydantic_deep.processors` to `pydantic_deep`
252
295
- Fixed `docs/api/agent.md` - added missing `include_execute` parameter to signature and parameters table
253
-
- Fixed `pydantic_deep/agent.py` - corrected docstring model default from "Claude Sonnet 4" to "openai:gpt-4.1"
296
+
- Fixed `pydantic_deep/agent.py` - corrected docstring model default from "Claude Sonnet 4" to "anthropic:claude-sonnet-4-6"
include_checkpoints=True, # Save, rewind, and fork conversations
@@ -192,25 +195,98 @@ agent = create_deep_agent(
192
195
)
193
196
```
194
197
195
-
### Custom Subagents
198
+
### MCP Servers
199
+
200
+
Connect to any [MCP](https://modelcontextprotocol.io/) server via pydantic-ai's `MCP` capability:
201
+
202
+
```python
203
+
from pydantic_ai.capabilities importMCP
204
+
205
+
agent = create_deep_agent(
206
+
capabilities=[
207
+
MCP(url="https://mcp.example.com/api"),
208
+
],
209
+
)
210
+
```
211
+
212
+
### Subagents
213
+
214
+
A built-in **research** subagent is included by default. Add your own:
196
215
197
216
```python
198
217
agent = create_deep_agent(
199
218
subagents=[
200
219
{
201
220
"name": "code-reviewer",
202
221
"description": "Reviews code for quality issues",
203
-
"instructions": "You are a senior code reviewer...",
204
-
"preferred_mode": "sync",
222
+
"instructions": "Check for security, performance, error handling...",
205
223
},
206
224
],
207
225
)
226
+
# The main agent delegates: task(description="Review auth.py", subagent_type="code-reviewer")
227
+
```
228
+
229
+
All subagents are full deep agents with filesystem, web, and memory tools. You only provide the specialized `instructions` — the framework adds `BASE_PROMPT` automatically.
230
+
231
+
### Project Files
232
+
233
+
pydantic-deep recognizes three special markdown files:
[Agent Client Protocol (ACP)](https://agentclientprotocol.com) adapter that enables pydantic-deep agents to run inside editors like [Zed](https://zed.dev).
4
+
5
+
## Installation
6
+
7
+
```bash
8
+
pip install pydantic-deep[acp]
9
+
```
10
+
11
+
## Quick Start
12
+
13
+
```bash
14
+
python -m apps.acp
15
+
```
16
+
17
+
The server auto-detects your API key from environment variables or `.env` files and picks the right provider.
0 commit comments