ANIP – open protocol so websites can talk directly to AI agents A new open protocol called ANIP (Agent-Native Interaction Protocol) enables websites to expose machine-readable interfaces for AI agents, allowing agents to discover and interact with site capabilities without scraping or custom integrations. The protocol uses a single YAML file at a well-known URL to describe endpoints, intents, and schemas, and is designed to be backwards compatible with existing APIs. An open standard for websites to speak directly to AI agents. The web was designed for humans. Buttons, menus, forms — all built so a person with eyes and a mouse can navigate them. AI agents can use these interfaces, but it's inefficient. An agent trying to book a flight or send an email has to scrape HTML, guess at form fields, and handle visual layouts that carry no meaning to a machine. ANIP is the missing layer. Any website can add a single file at /.well-known/anip.yaml that describes, in structured machine-readable form, exactly what the site can do and how to call it. AI agents can discover this file, understand the site's capabilities, and act — without scraping, without custom integrations, without reading documentation. It is to AI agents what HTML is to web browsers: a universal format that lets any agent understand any site. https://yoursite.com/.well-known/anip.yaml anip: "0.1" site: name: Your Site description: A brief description of what your site does. url: https://yoursite.com capabilities: - id: search-products name: Search Products description: Search the product catalog by keyword or category. intents: - search for products - find items in the store - browse product catalog endpoint: url: https://yoursite.com/api/products/search method: GET type: rest auth: type: none input: type: object properties: q: type: string description: Search query limit: type: integer description: Maximum results to return output: type: object properties: products: type: array description: Matching products total: type: integer description: Total result count tags: ecommerce, search, free, no-auth python import httpx, yaml Fetch the ANIP document resp = httpx.get "https://yoursite.com/.well-known/anip.yaml" doc = yaml.safe load resp.text Find a capability matching the agent's goal for cap in doc "capabilities" : if any "search" in intent for intent in cap "intents" : Call it — the schema tells the agent exactly what to send result = httpx.get cap "endpoint" "url" , params={"q": "laptop", "limit": 5} print result.json break That's it. No custom SDK. No API key hunt. No documentation reading. The full specification lives in spec/ANIP-1.md /shivanshmah14/anip/blob/main/spec/ANIP-1.md . Key design choices: One well-known URL. Always /.well-known/anip.yaml . Agents know where to look. YAML. Human-readable. Any developer can write and review it. Intent-based discovery. Capabilities are described by what agents want to do , not by endpoint paths. Protocol-agnostic. Works with REST, MCP, GraphQL, or gRPC. Backwards compatible. Adding ANIP to your site doesn't change your existing API at all. No central authority. Any site publishes its own document. No registration required. anip/ ├── spec/ │ ├── ANIP-1.md Core protocol specification │ ├── ANIP-2.md Registry protocol optional, for discoverability │ └── anip.schema.json JSON Schema for validation │ ├── reference-implementations/ │ ├── python/ Python library pip install anip │ ├── typescript/ TypeScript library npm install anip │ └── go/ Go library go get github.com/anip-protocol/anip-go │ ├── tools/ │ └── cli/anip.py CLI: validate, check, fetch, scaffold │ ├── examples/ │ ├── website-integration/ How to add ANIP to your site │ ├── agent-client/ How agents use ANIP │ └── mcp-bridge/ Using ANIP with MCP servers │ └── rfcs/ Proposals for spec changes Step 1: Create /.well-known/anip.yaml or run python tools/cli/anip.py scaffold Step 2: Serve it. Most web servers do this automatically. For nginx: location /.well-known/ { alias /var/www/well-known/; add header Access-Control-Allow-Origin ; } Step 3: Validate it: pip install pyyaml python tools/cli/anip.py validate ./anip.yaml Step 4: Check it's live: python tools/cli/anip.py check yourdomain.com Done. Your site now speaks to AI agents. pip install pyyaml httpx python import asyncio import httpx import yaml async def discover and call site: str, goal: str : async with httpx.AsyncClient as client: Discover resp = await client.get f"https://{site}/.well-known/anip.yaml" doc = yaml.safe load resp.text Search by intent for cap in doc "capabilities" : if any goal.lower in intent.lower for intent in cap "intents" : print f"Found: {cap 'name' } at {cap 'endpoint' 'url' }" Call it using the schema return cap asyncio.run discover and call "open-meteo.com", "weather forecast" Or use the Python reference implementation: pip install anip python from anip import fetch sync doc = fetch sync "open-meteo.com" results = doc.search "weather forecast" cap = results 0 print cap.endpoint.url https://api.open-meteo.com/v1/forecast print cap.auth.type none npm install anip yaml js import { fetch } from "anip"; const doc = await fetch "open-meteo.com" ; const results = await doc.search "weather forecast" ; const cap = results 0 .capability; console.log cap.endpoint.url ; // https://api.open-meteo.com/v1/forecast console.log cap.auth.type ; // none go get github.com/anip-protocol/anip-go python import anip "github.com/anip-protocol/anip-go" doc, err := anip.Fetch context.Background , "open-meteo.com" results := doc.Search "weather forecast" cap := results 0 .Capability fmt.Println cap.Endpoint.URL // https://api.open-meteo.com/v1/forecast pip install pyyaml httpx Generate a starter anip.yaml for your site python tools/cli/anip.py scaffold Validate a local file python tools/cli/anip.py validate ./anip.yaml Check if a live site has ANIP support python tools/cli/anip.py check open-meteo.com Fetch and display a live ANIP document python tools/cli/anip.py fetch open-meteo.com | Standard | Relationship | |---|---| MCP | Complementary. ANIP is the discovery layer; MCP is a transport. Set endpoint.type: mcp in your ANIP document to point to an MCP server. | OpenAPI | Complementary. ANIP is simpler and intent-focused. An ANIP capability can link to a full OpenAPI spec in its docs field. | robots.txt | Analogous pattern. robots.txt says what crawlers can't do. ANIP says what agents can do. | sitemap.xml | Analogous purpose. Sitemaps are for search engines. ANIP is for agents. | JSON-LD | Different goal. JSON-LD describes entities. ANIP describes actions. | ANIP is a community standard. Contributions to the spec, implementations, and documentation are welcome. See CONTRIBUTING.md /shivanshmah14/anip/blob/main/CONTRIBUTING.md for the process. What we need most right now: - Rust reference implementation - Java / Kotlin reference implementation - Real websites adding ANIP support open a PR linking yours - Feedback on the spec from real implementors What we don't need yet: - A central registry - Trust scores - Payment integrations - Governance structures Keep it simple. The protocol is the product. Because infrastructure that everyone depends on should belong to everyone. TCP/IP is not owned by a company. HTTP is not owned by a company. DNS is not owned by a company. These protocols work because they are open, stable, and governed by the community. ANIP should be the same: the foundational layer that any company, any startup, and any developer can build on — without asking permission, without paying fees, without depending on a single vendor. If ANIP succeeds, the companies that build on top of it will generate the value. That's the right outcome. The ANIP specification spec/ is released under CC0 1.0 Universal https://creativecommons.org/publicdomain/zero/1.0/ — public domain. Use it for anything. Reference implementations and tools are released under the MIT License /shivanshmah14/anip/blob/main/LICENSE . ANIP is currently at v0.1 — Draft . The spec is stable enough to implement and experiment with, but may change based on real-world feedback before v1.0. We will not make breaking changes without a clear migration path and advance notice. v1.0 will be declared when: - At least 5 production websites serve a valid ANIP document - At least 3 independent implementations exist in different languages - The spec has received at least 60 days of open community review Built by developers, for developers. Forever open.