Metadata-Version: 2.4
Name: atlas-pca-pydantic-ai
Version: 0.4.1
Summary: Proof-Carrying Authority tool guard for Pydantic AI (verify a PCActn before each tool runs)
Author: Atlas
License-Expression: MIT
Project-URL: Homepage, https://github.com/Atlas-Authorization/pca-python
Project-URL: Repository, https://github.com/Atlas-Authorization/pca-python
Project-URL: Issues, https://github.com/Atlas-Authorization/pca-python/issues
Project-URL: Specification, https://github.com/Atlas-Authorization/pca
Keywords: authorization,agents,proof-carrying-authority,pca,pydantic-ai
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Security
Classifier: Topic :: Security :: Cryptography
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: atlas-pca<0.5,>=0.4.1
Provides-Extra: test-real
Requires-Dist: pytest>=7; extra == "test-real"
Requires-Dist: pydantic-ai-slim==2.54.0; extra == "test-real"
Requires-Dist: pytest-asyncio; extra == "test-real"
Provides-Extra: pydantic-ai
Requires-Dist: pydantic-ai>=0.0.14; extra == "pydantic-ai"
Provides-Extra: test
Requires-Dist: pytest>=7; extra == "test"
Dynamic: license-file

# atlas-pca-pydantic-ai

Pydantic AI guard for **Proof-Carrying Authority (PCA)**: make every Pydantic AI tool call proof-carrying and
policy-gated. A tool only runs when the agent carries a valid, in-plan, resource-correct proof for exactly
that action. The adapter delegates all verification to [`atlas-pca`](https://pypi.org/project/atlas-pca/)
and reimplements no cryptography.

> Status: **0.4.1, unaudited.**

### What is tested

The default test suite runs without the framework, against the shared conformance proofs. A second suite, `make test-real` (needs the framework installed), runs against the real framework and is pinned to Pydantic AI 2.54.0 (`pydantic-ai-slim`). It covers a real `Agent` with a scripted offline model: proofs on `RunContext.deps` (encoded and inline), sync and async tools, `Tool(...)` wrapping, and the refusal reaching the model as a retry prompt with the reason (missing, undecodable, tampered, wrong audience, insufficient capability). Each denial test checks that the tool body never ran, and checks the refusal reason wherever the framework surfaces it.

Not covered: other framework versions (only the pinned one is exercised), live model providers (the models are scripted and offline), and any property of the underlying `atlas-pca` verifier beyond what it already documents. This package has not been independently audited.

## Install

```sh
pip install atlas-pca-pydantic-ai
```

This installs `atlas-pca>=0.4.1,<0.5` as a dependency.

## Use

Entry points: `pca_tool / PCAGuard`.

```python
from atlas_pca_pydantic_ai import pca_tool
```

See the module docstrings in `atlas_pca_pydantic_ai` for the full API, and the PCA specification for the model.
The verifier applies the full check order, including `grant_ref_bound` (the signed `grant_ref` must equal
the root capability id), as of `atlas-pca` 0.2.0.

## Links

- Source: https://github.com/Atlas-Authorization/pca-python
- Specification and docs: https://github.com/Atlas-Authorization/pca

License: MIT
