Machine-Readable Permissions for Web-Interacting Agents

Building agents that browse, scrape, and call APIs is straightforward with LangChain. Knowing what your agent is actually allowed to do on a given domain is not.

We built OpenTerms, an open protocol that gives every website a machine-readable permissions file (openterms.json) declaring what AI agents can do: read content, scrape data, call APIs, make purchases, train models. Agents check the file before acting, the same way crawlers check robots.txt before crawling.

Why this matters for agent developers shipping to production:

  • No more guessing whether a site permits scraping or API access

  • Conditional permissions handled natively (e.g., “scraping prohibited except with written consent,” “API access requires auth under separate Developer Terms”)

  • Every permission check generates a cryptographic compliance receipt (ORS) for audit trails

  • Works as a LangChain tool, guard, or callback handler

We studied 400 services’ Terms of Service and found that automated ToS interpretation is only 50% accurate for the three permissions that matter most (scraping, API access, AI training). A structured lookup replaces unreliable text parsing. A public registry of 511 services is already seeded.

The LangChain integration provides three patterns:

  • OpenTermsGuard: wraps any web tool with a permission gate. Denied actions return a message instead of executing.

  • OpenTermsChecker: standalone tool the agent can call to query permissions before deciding what to do.

  • OpenTermsCallbackHandler: passive observer that logs permission checks without blocking.

25 tests passing. No dependencies beyond langchain-core and requests. MIT licensed.

SDK: pip install openterms-py LangChain integration: pip install langchain-openterms Repo: https://github.com/jstibal/langchain-openterms Protocol docs: https://openterms.com/docs Registry (511 services): https://github.com/jstibal/openterms-registry-seed