Typed declarative contracts for AI agent systems.
Project description
Contract4Agents
Contract4Agents is a free, open-source, typed contract language for building agent systems that are reviewable before they run and accountable afterward. The contract is the source of truth for agents, shared capabilities, authorization, composition, controls, quality criteria, and expected evidence. Target bindings supply only the framework-specific implementation details.
The product loop is:
Declare -> Compile -> Plan -> Materialize -> Run -> Trace -> Assure
That separation is the point. You can change a model, provider profile, or tool
implementation without rewriting the portable agent design. Before execution,
the plan shows exactly how the selected target will implement each requested
semantic and blocks required guarantees it cannot honestly enforce. After
execution, contract-bound traces and assurance results distinguish passed,
violated, and unverified instead of treating missing evidence as success.
Quickstart
Install the core package and the OpenAI target:
pdm add "contract4agents[openai]"
To explore this repository's complete Incident Command example:
pdm install
pdm run python examples/incident-command/data/seed.py
pdm run contract4agents check examples/incident-command
pdm run contract4agents compile examples/incident-command --out .contract/build/incident-command
pdm run contract4agents plan examples/incident-command --target openai --profile test
The first two commands need no provider credentials and do not import or call
application implementations. plan loads target bindings only far enough to
validate coverage and safely inspect callable signatures; it does not construct
agents or execute business code.
A Small Contract-First Team
Define portable types and a shared capability:
type SupportRequest:
ticket_id: string
question: string
type SupportReply:
answer: string
needs_follow_up: boolean
tool knowledge.search(query: string) -> SupportReply:
description = "Search the approved support knowledge base."
side_effect = false
Grant the capability to an agent. Availability, authorization, and execution are independent and explicit:
agent SupportResponder(request: SupportRequest) -> SupportReply:
use knowledge.search:
availability = enabled
authorization = preapproved
execution = host
goal = "Answer the support request accurately."
description = "Handles first-line support questions."
guidance = [
"Use only evidence returned by approved capabilities.",
"Say when the available evidence is insufficient.",
]
Bind the portable name to one target implementation in
contract4agents.targets.toml:
schema_version = "1"
[targets.openai]
adapter = "openai"
[targets.openai.tools."knowledge.search"]
python = "your_app.tools:search_knowledge"
[targets.openai.profiles.test]
default_model = "test-model"
[targets.openai.profiles.production]
default_model = "gpt-5.2"
The binding does not repeat prompts, permissions, schemas, agent factories, or controls. Those remain contract-owned.
Inspect Before Construction
Compile provider-neutral artifacts and review the resolved target plan:
contract4agents check agent_contracts
contract4agents compile agent_contracts --out .contract/build
contract4agents generate agent_contracts --out .contract/generated
contract4agents plan agent_contracts --target openai --profile production \
--out .contract/build/production-plan.json
Compilation produces deterministic canonical IR, its digest, JSON Schemas,
audience-safe instructions, reviewer documentation, and generated Pydantic,
TypeScript, and Zod types. compile --check and generate --check make stale
generated artifacts a CI failure.
The plan resolves models, bindings, grants, approvals, composition, controls,
isolation mechanisms, host obligations, and expected telemetry. Each mapping is
reported as exact, host_enforced, emulated, degraded, or unsupported.
Required degraded or unsupported guarantees fail closed.
Materialize Normal Framework Objects
Contract4Agents constructs the complete native agent graph at runtime:
from agents import Runner
from contract4agents import materialize
result = materialize(
"agent_contracts",
target="openai",
profile="production",
)
support_agent = result.agents["SupportResponder"]
reviewed_plan = result.plan
run_result = await Runner.run(support_agent, input="Where is my order?")
result.agents contains ordinary OpenAI Agents SDK Agent objects. Generated
output types, host tools, approval hooks, delegations, and handoffs are wired
from the contract graph and target bindings; host code does not maintain a
parallel agent registry.
The host still owns credentials, approval decisions and UI, persistence, external services, and deterministic application workflow. Contract4Agents is not a general workflow language and does not hide provider differences.
Evidence, Evals, and Assurance
The normalized trace schema binds every event to a contract digest, plan digest, stable semantic IDs, provider-native correlation, provenance, and audience-safe redaction metadata. The same control assessor is used for controlled evals and imported production traces.
.eval files name scenarios and expectations. The target/profile eval workflow
derives its agent, capability, grant, control, and telemetry inventory from the
contract and plan; users do not restate the runtime in a fixture manifest.
Repeated campaigns report pass, violation, and unverified rates with uncertainty,
latency and cost summaries, thresholds, and optional baseline comparisons.
Assurance bundles join the canonical contract, materialization plan, normalized
traces, control results, eval summaries, and semantic diffs into one portable
review package. Missing or incomplete evidence remains explicitly unverified.
This is useful evidence for compliance and release review; it is not a legal
certification by itself.
Public Examples
- Incident Command is the recommended first read. It demonstrates shared capabilities, different authorization grants, explicit context origins, generated delegations, controls, target bindings, and deterministic eval data.
- Multi-Lens Research demonstrates a larger delegation graph, typed workflow boundaries, and an explicit isolation profile.
- Market Research Brief demonstrates host tools alongside a provider-native web-search binding.
See the examples guide for the common project structure.
Documentation
- First Contract Project
- Using Contract4Agents in an Application
- Language Reference
- CLI Reference
- OpenAI Target Reference
- Trace Schema
- Evals, Controls, and Assurance
- Documentation Index
- Vision
The semantic model is the detailed architecture specification. Coding agents should begin with AGENTS.md.
Development
pdm install
pdm run docs-check
pdm run validate
pdm build
Normal local checks do not require an API key. Opt-in OpenAI live checks are documented in Validation and Quality Gates.
License
MIT. See LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file contract4agents-0.8.0.tar.gz.
File metadata
- Download URL: contract4agents-0.8.0.tar.gz
- Upload date:
- Size: 133.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
57ddd857795ea973f6f6ca2a894daed421e8a931d9ab639e4899e08144a0c8d4
|
|
| MD5 |
000158deb1f46acd146cc3409889195f
|
|
| BLAKE2b-256 |
4ca5801d0ae008755fed073aa5600fe592d0e1af45941239dbdca1551a9560c3
|
Provenance
The following attestation bundles were made for contract4agents-0.8.0.tar.gz:
Publisher:
python-publish.yml on btfranklin/contract4agents
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
contract4agents-0.8.0.tar.gz -
Subject digest:
57ddd857795ea973f6f6ca2a894daed421e8a931d9ab639e4899e08144a0c8d4 - Sigstore transparency entry: 2178624924
- Sigstore integration time:
-
Permalink:
btfranklin/contract4agents@56fcdc9f16b53bcd9b87125c6756be0485fb4804 -
Branch / Tag:
refs/tags/v0.8.0 - Owner: https://github.com/btfranklin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@56fcdc9f16b53bcd9b87125c6756be0485fb4804 -
Trigger Event:
release
-
Statement type:
File details
Details for the file contract4agents-0.8.0-py3-none-any.whl.
File metadata
- Download URL: contract4agents-0.8.0-py3-none-any.whl
- Upload date:
- Size: 170.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ed38890ee1b58493933d0463b1fb172eaf5757eda104d298550a88d36c776356
|
|
| MD5 |
cd3c41f7c09bc5a2ad92556c1154cbfd
|
|
| BLAKE2b-256 |
d9802cf8b8726c8c5297ac8def5f564bc11e23818d4a2ac91d00bbc649f46076
|
Provenance
The following attestation bundles were made for contract4agents-0.8.0-py3-none-any.whl:
Publisher:
python-publish.yml on btfranklin/contract4agents
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
contract4agents-0.8.0-py3-none-any.whl -
Subject digest:
ed38890ee1b58493933d0463b1fb172eaf5757eda104d298550a88d36c776356 - Sigstore transparency entry: 2178624994
- Sigstore integration time:
-
Permalink:
btfranklin/contract4agents@56fcdc9f16b53bcd9b87125c6756be0485fb4804 -
Branch / Tag:
refs/tags/v0.8.0 - Owner: https://github.com/btfranklin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@56fcdc9f16b53bcd9b87125c6756be0485fb4804 -
Trigger Event:
release
-
Statement type: