PEAC Policy Kit lets you define access policies for AI agents in a simple YAML file, then compile them into deployable artifacts that crawlers and agents can discover.
Flow: peac-policy.yaml -> validate -> generate -> deploy artifacts
# From the PEAC monorepo
pnpm add @peac/cli
# Or use directly from the repo
pnpm --filter @peac/cli buildpeac policy initThis creates peac-policy.yaml with a minimal open policy.
# peac-policy.yaml
version: 'peac-policy/0.1'
defaults:
decision: allow # or "deny" for restrictive default
rules:
- name: block-training
purpose: train
decision: deny
- name: allow-search-bots
subject:
type: agent
labels: [search-bot]
purpose: [crawl, index]
decision: allowpeac policy validate peac-policy.yaml
# Verbose output
peac policy validate peac-policy.yaml --verbosepeac policy generate peac-policy.yaml --well-known --dry-runThis shows what would be generated without writing files.
peac policy generate peac-policy.yaml --well-known --out dist/peacCopy the generated files to your web server:
cp dist/peac/.well-known/peac.txt /.well-known/peac.txt| File | Purpose | Deploy To |
|---|---|---|
.well-known/peac.txt |
Authoritative policy signal | /.well-known/peac.txt |
robots-ai-snippet.txt |
Robots.txt additions | Append to /robots.txt |
aipref-headers.json |
AIPREF-compatible headers | HTTP middleware |
ai-policy.md |
Human-readable summary | Documentation |
Note: peac.txt is the source of truth. Other artifacts are for compatibility.
version: 'peac-policy/0.1'
defaults:
decision: allow
rules: []Generated peac.txt:
version: 0.9
usage: open
receipts: optional
version: 'peac-policy/0.1'
defaults:
decision: deny
rules:
- name: allow-search
purpose: [crawl, index, search]
decision: allow
- name: allow-inference-with-receipt
purpose: inference
decision: allowGenerated peac.txt:
version: 0.9
usage: conditional
purposes: [crawl, index, inference, search]
receipts: required
peac policy generate peac-policy.yaml --receipts requiredOr override in the command:
peac policy generate peac-policy.yaml --receipts optional
peac policy generate peac-policy.yaml --receipts omitpeac policy generate peac-policy.yaml --rate-limit "100/hour"peac policy generate peac-policy.yaml --negotiate "https://example.com/negotiate"peac policy generate peac-policy.yaml --contact "licensing@example.com"# What decision applies for an agent doing training?
peac policy explain peac-policy.yaml --subject-type agent --purpose train
# What about a human doing inference?
peac policy explain peac-policy.yaml --subject-type human --purpose inference| Error | Cause | Fix |
|---|---|---|
Invalid version |
Missing or wrong version field | Use version: "peac-policy/0.1" |
Unknown purpose |
Typo in purpose name | Use: crawl, index, train, inference, ai_input, ai_index, search |
Duplicate rule name |
Two rules with same name | Use unique names for each rule |
=== DRY RUN ===
Would write: dist/peac/.well-known/peac.txt
---
version: 0.9
usage: conditional
purposes: [crawl, index, train]
receipts: required
---
Would write: dist/peac/robots-ai-snippet.txt
...
- Rule order matters - First matching rule wins (like firewall rules)
- Robots snippet is conservative - Review before appending to
robots.txt - AIPREF output is for compatibility -
peac.txtis the authoritative source - Test with
--dry-runfirst - Always preview before writing files
- Policy Kit API Reference
- PROTOCOL-BEHAVIOR.md - Protocol specification
- README - Full documentation