Skip to content
Back to skills

097 Index 21c18601

ASecurity

<h1 align="center">Pydantic AI Middleware</h1> <p align="center"> <em>Simple middleware for Pydantic AI agents, the Pythonic way</em> </p> <p align="center"> <a href="https://github.com/vstorm-co/pydantic-ai-middleware/actions/workflows/ci.yml"><img src="https://github.com/vstorm-co/pydantic-ai-middleware/actions/workflows/ci.yml/badge.svg" alt="CI"></a> <a href="https://github.com/vstorm-co/pydantic-ai-middleware"><img src="https://img.shields.io/badge/coverage-100%25-brightgreen" alt="Cover...

  • 9 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 11, 2026
ai-agentspythonbashsqlrailsdockergitapibackendsecuritydocumentation

Works with

  • api

Security analysis

A96/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned October 11, 2026

npx -y skills add tools-only/X-Skills --skill 097-index_21c18601 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 097 Index 21c18601?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for 097 Index 21c18601
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tools-only-097-index-21c18601/badge)](https://www.skillsdirectory.com/skills/tools-only-097-index-21c18601)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

SKILL.md
<h1 align="center">Pydantic AI Middleware</h1>
<p align="center">
  <em>Simple middleware for Pydantic AI agents, the Pythonic way</em>
</p>
<p align="center">
  <a href="https://github.com/vstorm-co/pydantic-ai-middleware/actions/workflows/ci.yml"><img src="https://github.com/vstorm-co/pydantic-ai-middleware/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
  <a href="https://github.com/vstorm-co/pydantic-ai-middleware"><img src="https://img.shields.io/badge/coverage-100%25-brightgreen" alt="Coverage"></a>
  <a href="https://pypi.org/project/pydantic-ai-middleware/"><img src="https://img.shields.io/pypi/v/pydantic-ai-middleware.svg" alt="PyPI"></a>
  <a href="https://www.python.org/"><img src="https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12%20%7C%203.13-blue" alt="Python"></a>
  <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/license-MIT-green" alt="License"></a>
</p>

---

**Pydantic AI Middleware** is a lightweight library for adding before/after hooks to [Pydantic AI](https://ai.pydantic.dev/) agents. No imposed structure — you decide what to build: logging, guardrails, metrics, rate limiting, PII redaction, or anything else.

Part of the [vstorm-co](https://github.com/vstorm-co) ecosystem for building production AI agents with Pydantic AI.

## Why use Pydantic AI Middleware?

1. **Clean API**: Simple before/after hooks at 6 lifecycle stages — no complex abstractions to learn.

2. **Maximum Flexibility**: No imposed guardrail structure. You decide what each hook does.

3. **Production Ready**: 100% test coverage, strict typing with Pyright + MyPy, and parallel execution with early cancellation.

4. **Composable**: Chain, branch, parallelize, and load middleware from config files.

## Hello World Example

```python
from pydantic_ai import Agent
from pydantic_ai_middleware import MiddlewareAgent, AgentMiddleware, InputBlocked

class SecurityMiddleware(AgentMiddleware[None]):
    """Block dangerous inputs before they reach the agent."""

    async def before_run(self, prompt, deps, ctx):
        if "dangerous" in prompt.lower():
            raise InputBlocked("Dangerous content detected")
        return prompt

class LoggingMiddleware(AgentMiddleware[None]):
    """Log agent activity."""

    async def before_run(self, prompt, deps, ctx):
        print(f"Starting: {prompt[:50]}...")
        return prompt

    async def after_run(self, prompt, output, deps, ctx):
        print(f"Finished: {output}")
        return output

agent = MiddlewareAgent(
    agent=Agent('openai:gpt-4o'),
    middleware=[LoggingMiddleware(), SecurityMiddleware()],
)

result = await agent.run("Hello, how are you?")
```

## Decorator Syntax

For simple middleware, use decorators:

```python
from pydantic_ai_middleware import before_run, after_run, ToolBlocked, before_tool_call

@before_run
async def log_input(prompt, deps, ctx):
    print(f"Input: {prompt}")
    return prompt

@before_tool_call
async def block_dangerous_tools(tool_name, tool_args, deps, ctx):
    if tool_name == "delete_file":
        raise ToolBlocked(tool_name, "Not allowed")
    return tool_args
```

## Core Capabilities

| Capability | Description |
|------------|-------------|
| **6 Lifecycle Hooks** | before_run, after_run, before_model_request, before_tool_call, after_tool_call, on_error |
| **Parallel Execution** | Run multiple middleware concurrently with 4 aggregation strategies |
| **Async Guardrails** | Run guardrails alongside LLM calls (BLOCKING, CONCURRENT, ASYNC_POST) |
| **Middleware Chains** | Compose middleware into reusable sequences with `+` operator |
| **Conditional Routing** | Route to different middleware based on runtime conditions |
| **Config Loading** | Build pipelines from JSON/YAML configuration files |
| **Context Sharing** | Share data between hooks with access control |
| **Decorator Syntax** | Create middleware from simple decorated functions |

## Part of the Ecosystem

Pydantic AI Middleware works alongside other vstorm-co packages:

| Package | Description |
|---------|-------------|
| [pydantic-ai](https://github.com/pydantic/pydantic-ai) | The foundation: Agent framework by Pydantic |
| [pydantic-deep](https://github.com/vstorm-co/pydantic-deep) | Full agent framework with planning, subagents, skills |
| [pydantic-ai-backend](https://github.com/vstorm-co/pydantic-ai-backend) | File storage, Docker sandbox, permission controls |
| [pydantic-ai-todo](https://github.com/vstorm-co/pydantic-ai-todo) | Task planning with PostgreSQL and event streaming |
| [subagents-pydantic-ai](https://github.com/vstorm-co/subagents-pydantic-ai) | Multi-agent orchestration |
| [summarization-pydantic-ai](https://github.com/vstorm-co/summarization-pydantic-ai) | Context management processors |

## Installation

```bash
pip install pydantic-ai-middleware
```

With YAML config support:

```bash
pip install pydantic-ai-middleware[yaml]
```

## llms.txt

Pydantic AI Middleware supports the [llms.txt](https://llmstxt.org/) standard. Access documentation at `/llms.txt` for LLM-optimized content.

## Next Steps

- [Installation](installation.md) - Get started in minutes
- [Core Concepts](concepts/index.md) - Learn about middleware, hooks, and context
- [Advanced Features](advanced/middleware-chains.md) - Chains, parallel execution, config loading
- [Examples](examples/index.md) - Real-world examples
- [API Reference](api/index.md) - Complete API documentation

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.