Agents shouldn't click buttons. dispatch_intent() gives them a typed, transport-agnostic primitive over any API, CLI, browser, or desktop — with OAuth resolved automatically and zero human interaction at runtime.
// One command. Any software.
$ agentdom auth linear.app # one-time OAuth consent
$ agentdom auth resend.com # API key, stored in Keychain
// Then let the agent do the work
$ agentdom goal "Create a Linear ticket for the login crash
and send a Slack summary to #engineering"Vision model + CDP screenshot loop = 3–8 s/action, brittle on every deploy, and no structured result to verify. Agents need a stable API contract — not pixel coordinates.
Agent sees a form → takes screenshot → sends to vision model → guesses coordinates → clicks → waits → repeats
Agent declares intent → wallet provides token → one HTTP call → structured result
Agents pass intent + args + provider. AgentDOM selects the lowest-latency transport — REST API, CLI bridge, Browser CDP, or Desktop AX — and injects the resolved credential automatically.
// Agent says what it wants — AgentDOM figures out how
dispatch_intent("issues.create", {
title: "Login crash on iOS 17",
priority: 1,
teamId: "ENG"
}, "linear.app")
// → looks up wallet token → POST https://api.linear.app/graphql
// → { success: true, issue: { id: "ENG-42", url: "..." } }
// Total latency: ~120ms. No browser. No screenshot.Agent Token Protocol → env var → base64 wallet → wallet file → OS Keychain → AWS SSM → HashiCorp Vault. Local-first: no cloud token proxy, no escrow service, tokens never leave your infrastructure.
// First time: browser opens, human approves OAuth once
$ agentdom auth hubspot.com
→ Stored in macOS Keychain. Never leaves your machine.
// All future calls: silent, auto-refreshed, zero prompts
dispatch_intent("contacts.create", { email: "alice@acme.com" })
// → token fetched from Keychain → 1 API hop → donePolyfill manifests auto-generated from public OpenAPI specs. Each maps semantic intent IDs to REST endpoints, auth headers, side-effect classes, and optional Agent Token Protocol endpoints for M2M token issuance.
GET /.well-known/agentdom.json// .well-known/agentdom.json (any vendor publishes this)
{
"version": "1.0",
"host": "yourapp.com",
"auth": { "method": "oauth2", ... },
"capabilities": [{
"intent": "contacts.create",
"transport": "api",
"endpoint": "https://api.yourapp.com/contacts",
"side_effects": ["external"]
}]
}oauth2_pkceBrowser redirectoauth2_deviceDevice code pollapi_keyHeader injectionagent_tokensM2M provisioningoauth2_ccClient credentials| field | type | example | description |
|---|---|---|---|
| intent | string | "contacts.create" | Semantic action ID — provider-scoped, versioned |
| args | object | { email, name, ... } | Typed parameters — validated against manifest schema |
| provider | string? | "api.hubspot.com" | Optional — auto-resolved from intent registry if omitted |
| transport | enum | "api" | "cli" | "browser" | Override dispatch priority — default: auto |
| side_effects | string[] | ["external", "send"] | Effect classes — gates policy engine before execution |
| verify | string? | "result.data.id != null" | JS expression evaluated post-execution for correctness |
| timeout_ms | number? | 15000 | Per-step timeout — default 15s, overridable per intent |
| dry_run | boolean? | true | Plan-only mode — validate + cost-estimate, no execution |
LLM emits a structured JSON plan. Each step runs through policy check → dispatch_intent → result verification. Failed steps trigger LLM replanning. Session state checkpointed to disk.
Intent → cheapest available transport. API < CLI < CDP/browser < AX/desktop < coordinate. Agents always get the fastest path.
OS Keychain (macOS/Windows/Linux) stores OAuth tokens. One consent, then silent forever. Auto-refreshes before expiry.
50+ SaaS manifests hosted at agentdom.dev/manifests/. Agents work with HubSpot, Stripe, Linear, Slack — before vendors do anything.
Cross-session memory stores what worked and what failed per provider. Agents learn and improve over time.
Per-effect allow/prompt/deny. read=allow, send=prompt, delete=deny by default. Human approves sensitive actions.
Explicit JSON plan → policy check → execute → verify result → replan on failure. Not greedy one-shot calls.
REST/GraphQL, Web CDP (Shadow DOM, iframes, React), Electron, macOS AX, CLI — all behind the same intent interface.
Open spec. Vendors publish agentdom.json to declare capabilities. Agents discover and use new tools without any code changes.
ATP replaces OAuth browser redirects with a cryptographic machine-to-machine handshake. Your agent authenticates at 3am — no human needed.
// No browser. No human. Just math.
const token = await requestToken('stripe.com', {
scopes: ['charges.read', 'refunds.create'],
purpose: 'Process refund for order #4821'
});
// → { access_token: "at_...", expires_in: 3600 }
// Stored in OS Keychain. Auto-refreshes before expiry.Every request signed with a pre-shared secret. Constant-time verification prevents timing attacks.
Hardware UUID fingerprint — same identity across reboots. No registration required.
Direct handshake. No browser, no redirect, no cloud proxy.
AgentDOM exposes a native MCP server (stdio + SSE) and implements OpenAI function-calling and Anthropic tool-use schemas out of the box. Any framework that speaks these protocols connects with zero glue code.
claude mcp add agentdom -- node \
$(npm root -g)/agentdom/desktop-mcp-server.jsconst tools = await agentdom.toOpenAI('contacts.create');
// → { type: "function", function: { name, parameters } }node $(npm root -g)/agentdom/mcp-api-server.js
# Listens on http://localhost:3001/mcpServe GET /.well-known/agentdom.json — declare intents, auth method, and an Agent Token Protocol endpoint for M2M credential issuance. Zero SDK required. Works with every AgentDOM client immediately.
npx agentdom-publisher init \
--openapi=./openapi.json \
--host=api.yourapp.com# Deploy to:
https://yourapp.com/.well-known/agentdom.jsondispatch_intent("contacts.create", {...},
"yourapp.com")
# → works immediately, no code changesOne-time credential setup. Headless forever. Zero humans in the agent runtime loop.