The universal runtime that makes every website, desktop app, and API accessible to AI agents — zero human in the loop.
Project description
agentdom
The universal runtime that makes every website, desktop app, and API accessible to AI agents — zero human in the loop.
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
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 agentdom-3.6.0.tar.gz.
File metadata
- Download URL: agentdom-3.6.0.tar.gz
- Upload date:
- Size: 7.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
daafb43d860dffbfdc75b746f8ad58b06ee050ea0b3e3b1f5e2626865c598bb3
|
|
| MD5 |
8c55b7323a343ca50c243c04dc7c08e6
|
|
| BLAKE2b-256 |
735a8e05bce45d6b83d1e4fb24fe00e2e5e30f17a80de7b50a45dc0e9081b4ab
|
Provenance
The following attestation bundles were made for agentdom-3.6.0.tar.gz:
Publisher:
publish-pypi.yml on RagavRida/agentdom
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentdom-3.6.0.tar.gz -
Subject digest:
daafb43d860dffbfdc75b746f8ad58b06ee050ea0b3e3b1f5e2626865c598bb3 - Sigstore transparency entry: 1462296301
- Sigstore integration time:
-
Permalink:
RagavRida/agentdom@c16bc8ae87f2b8f981be067cfb751d2a1751918e -
Branch / Tag:
refs/tags/v3.6.0 - Owner: https://github.com/RagavRida
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@c16bc8ae87f2b8f981be067cfb751d2a1751918e -
Trigger Event:
push
-
Statement type:
File details
Details for the file agentdom-3.6.0-py3-none-any.whl.
File metadata
- Download URL: agentdom-3.6.0-py3-none-any.whl
- Upload date:
- Size: 7.6 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 |
a79cfeefe48e72ef4f5ef62750cd331c3a30f8a2c7ddd26f890cf73f2340949a
|
|
| MD5 |
8b747f5c1c01a6334ee8e0d60248a1c1
|
|
| BLAKE2b-256 |
a4295866dcd7ccaffaafe39655e9c2ea250e8fbf3dfbda8eb0531a2870a45618
|
Provenance
The following attestation bundles were made for agentdom-3.6.0-py3-none-any.whl:
Publisher:
publish-pypi.yml on RagavRida/agentdom
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentdom-3.6.0-py3-none-any.whl -
Subject digest:
a79cfeefe48e72ef4f5ef62750cd331c3a30f8a2c7ddd26f890cf73f2340949a - Sigstore transparency entry: 1462296405
- Sigstore integration time:
-
Permalink:
RagavRida/agentdom@c16bc8ae87f2b8f981be067cfb751d2a1751918e -
Branch / Tag:
refs/tags/v3.6.0 - Owner: https://github.com/RagavRida
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@c16bc8ae87f2b8f981be067cfb751d2a1751918e -
Trigger Event:
push
-
Statement type: