django-spec-agents
Pydantic-AI agents for Django, in two halves. The
agent host takes an AgentConfig and a tool registry and returns a built
pydantic_ai.Agent, with an audit trail over every tool call, a server-side
approval gate for destructive tools, a failure policy, conversation and attachment
stores, and an opt-in store app. It reads no Django settings of its own: a
transport such as django-ag-ui owns its
settings, builds the config and hands it down. spec_tools, behind the
[specs] extra, serves djangorestframework-services
specs to an agent as tools, in process, with each spec's own validation,
permissions and rendering: SpecToolset, and SpecCapability over it.
The host was published as django-pydantic-agent and spec_tools as
djangorestframework-pydantic-ai. This package carries both under one import
path, django_spec_agents, and the root never imports spec_tools, so the host
installs and runs without the extra.
Install
pip install django-spec-agents # the agent host
pip install "django-spec-agents[specs]" # and specs as agent tools
Python 3.10 or later and Django 4.2 or later. [specs] adds Django REST
Framework, djangorestframework-services and django-service-specs. The other
extras: [drf-mcp] bridges a djangorestframework-mcp-server registry as a
toolset, [harness] adds the pydantic-ai-harness capabilities, [filter] adds
django-filter for filtered selectors, and [anthropic], [openai] and
[google] add a model provider.
The store app is opt-in. To persist conversations, attachments, steps and memory
in the database, add it to INSTALLED_APPS, where its label is
django_spec_agents_store, and run migrate:
INSTALLED_APPS = [
# ...
"django_spec_agents.contrib.store",
]
Quickstart
An agent over tools you register:
from django_spec_agents import AgentConfig, AgentDeps, ToolRegistry, build_agent, tool
registry = ToolRegistry()
@tool(registry)
def list_orders(status: str) -> list[dict]:
"""List orders with the given status."""
...
agent = build_agent(registry, AgentConfig(model="anthropic:claude-sonnet-4-5"))
result = await agent.run("what is still pending?", deps=AgentDeps(user=request.user))
The same agent calling your specs beside the registry's tools, with [specs]
installed. Each key is a tool name, distinct from the registry's; the description, the parameter schema and the return schema come from the
spec. Each spec declares its permission_classes, which the toolset refuses to
go without, because nothing over HTTP gates a call made in process:
from django_spec_agents.spec_tools import SpecToolset
toolset = SpecToolset({"list_invoices": list_invoices_spec, "create_invoice": create_invoice_spec})
agent = build_agent(registry, AgentConfig(model="anthropic:claude-sonnet-4-5", toolsets=[toolset]))
Documentation
https://artui.github.io/django-spec-agents/
- Concepts: how a config becomes an agent, and what belongs here versus in a transport.
- Tools: registering tools and what their metadata does.
- Storage: the store contracts, owner scoping and the store app.
- Policy: audit, the approval gate and the failure policy.
- Integrations: specs and MCP tools as agent tools.
- Spec tools:
SpecToolsetandSpecCapabilityin depth. - Reference: the public API.
License
MIT. See LICENSE.
Metadata
Release files for django-spec-agents 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| django_spec_agents-0.1.0.tar.gz | 590.9 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| django_spec_agents-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 786.5 kB
Release files / django_spec_agents-0.1.0.tar.gz
| Download URL | django_spec_agents-0.1.0.tar.gz |
|---|---|
| Size | 590.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
574b3335a8b3a69ee00a6b2e0c2db19eac76857b56553472448c7e66a02af152
|
|
BLAKE2b-256 checksum How to use checksums |
f9647dadbe7674bc5ef28c8ac567a850a39a56ac203a2586e60ce848c262abdc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.
Transparency logRelease files / django_spec_agents-0.1.0-py3-none-any.whl
| Download URL | django_spec_agents-0.1.0-py3-none-any.whl |
|---|---|
| Size | 195.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5ed30b351334efb4999ce50b2aa62130de396f32c773ab1943c505716d5e88ce
|
|
BLAKE2b-256 checksum How to use checksums |
df4131a3430526eeef1e773531d82c8ddb127ca0d07272ff6d6e05482cf7d699
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.
Transparency logSecurity for django-spec-agents 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for django_spec_agents-0.1.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.