Skip to main content

agentdom

The universal runtime that makes every website, desktop app, and API accessible to AI agents — zero human in the loop.

PyPI version Python versions License npm

Website · Docs · GitHub · npm package


Install

pip install agentdom

With framework support:

pip install "agentdom[flask]"    # Flask integration
pip install "agentdom[fastapi]"  # FastAPI integration
pip install "agentdom[dispatch]" # dispatch_intent() support (requires httpx)
pip install "agentdom[all]"      # everything

Quick start — dispatch an intent

import asyncio
from agentdom import dispatch_intent

async def main():
    # Create a GitHub issue — routes via REST API, no browser needed
    result = await dispatch_intent(
        "issues.create",
        {
            "title": "Login crash on iOS 17",
            "body":  "Reproducible on iPhone 15 Pro",
            "labels": ["bug", "mobile"],
        },
        host="github.com",
    )
    print(result)  # → {"id": 42, "url": "https://github.com/..."}

asyncio.run(main())

Or synchronously:

from agentdom import dispatch_intent_sync

result = dispatch_intent_sync("repos.list", {"username": "octocat"}, host="github.com")

Embed AgentDOM in your app

Flask

from flask import Flask
from agentdom import AgentDOM

app = Flask(__name__)
agent = AgentDOM(
    host="api.myapp.com",
    auth={"method": "api_key", "key_header": "Authorization"},
)

@agent.capability("todos.create", description="Create a new todo item",
                  args={"title": {"type": "string", "required": True}})
def create_todo(args):
    return {"id": 1, "title": args["title"]}

@agent.capability("todos.list", description="List all todo items")
def list_todos(args):
    return [{"id": 1, "title": "Buy milk"}]

agent.register(app)

# Now your app automatically serves:
#   GET  /.well-known/agentdom.json  → manifest
#   POST /api/agentdom/todos.create  → your handler
#   POST /api/agentdom/todos.list    → your handler

FastAPI

from fastapi import FastAPI
from agentdom import AgentDOM

app = FastAPI()
agent = AgentDOM(host="api.myapp.com")

@agent.capability("orders.ship", description="Ship a pending order",
                  args={"order_id": {"type": "string", "required": True}})
async def ship_order(args):
    # async handlers are fully supported
    return await shipping_service.ship(args["order_id"])

agent.register(app)

Standalone manifest

from agentdom import AgentDOM

agent = AgentDOM(host="api.myapp.com")

@agent.capability("items.create", description="Create an item")
def create_item(args):
    return {"created": True}

# Get the manifest dict to serve however you like
manifest = agent.manifest()
print(manifest)
# → {"version": "1.0", "host": "api.myapp.com", "capabilities": [...], ...}

Auth configuration

# API key
agent = AgentDOM(
    host="api.myapp.com",
    auth={
        "method": "api_key",
        "key_header": "Authorization",
        "key_format": "Bearer {token}",
    },
)

# OAuth 2.0
agent = AgentDOM(
    host="api.myapp.com",
    auth={
        "method": "oauth2",
        "auth_url":  "https://api.myapp.com/oauth/authorize",
        "token_url": "https://api.myapp.com/oauth/token",
        "scopes":    ["read", "write"],
    },
)

# No auth (public API)
agent = AgentDOM(host="api.myapp.com", auth={"method": "none"})

Environment variables

Variable Description
AGENTDOM_API_URL Override the AgentDOM API server URL
AGENTDOM_TOKEN Default auth token for dispatch_intent
<HOST>_TOKEN Per-host token (e.g. GITHUB_COM_TOKEN)

Agent Token Protocol

Publishers can declare an agent_tokens endpoint so agents provision their own scoped tokens automatically:

agent = AgentDOM(
    host="api.myapp.com",
    auth={
        "method": "api_key",
        "agent_tokens": {
            "issue":  "POST https://api.myapp.com/agent-tokens",
            "revoke": "DELETE https://api.myapp.com/agent-tokens/{id}",
            "scopes": ["read", "write"],
            "max_ttl_seconds": 86400,
        },
    },
)

Supported providers

Provider Auth Capabilities
github.com Device Flow repos, issues, PRs, actions (811)
linear.app OAuth 2.0 issues, teams, cycles (8)
slack.com OAuth 2.0 messages, channels (6)
notion.so OAuth 2.0 pages, databases (6)
stripe.com API Key payments, customers (442)
resend.com API Key emails, domains (5)

More providers at getagentdom.com/providers.

License

MIT © Ragavendhra Machikatla

Metadata

Release files for agentdom 3.7.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for agentdom 3.7.0
File Size Uploaded
agentdom-3.7.0.tar.gz 7.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for agentdom 3.7.0
File Interpreter ABI Platform
agentdom-3.7.0-py3-none-any.whl Python 3 none any Details

Total release size: 14.7 kB

Release files / agentdom-3.7.0.tar.gz

Download URL agentdom-3.7.0.tar.gz
Size 7.1 kB
Tags Source
SHA-256 checksum
How to use checksums
8494c91715872c0d658799369e802de154c56dc7a710f9dddf0ad8fb42d1c52b
BLAKE2b-256 checksum
How to use checksums
7af6509e6f9fc3b09d74d9635d04c4e7f56aa098d17a12475c755f36ffd580be
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 May 14, 2026.

Transparency log

Release files / agentdom-3.7.0-py3-none-any.whl

Download URL agentdom-3.7.0-py3-none-any.whl
Size 7.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d4d856662d3c306161c488e5ad75f7cbbd632044bc96f9ecee3064079f14a1f7
BLAKE2b-256 checksum
How to use checksums
ebffd7dbdccbe85a88c4babbea3b604aa5c693cddf0796950300bc67b9203975
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 May 14, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

3.7.0 This release

2 release files

3.6.1

2 release files

3.6.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page