01 · The insight
Every device is already an edge. None are addressable.
Your iPhone has HRV, motion, mic, camera, haptics, push, speaker, an app fleet. Your Watch has HRV, haptics, complications, Live Activities. Your MacBook has screen, Notifications Center, Shortcuts, AppleScript. Your browser has tabs, content, push, extensions. Your car has voice, screen, location. Your home has actuators — lights, thermostats, locks, speakers. Each platform has an SDK.
What does not exist: a single protocol where any LLM can subscribe to events from any device, propose actions on any device, and have those actions governed by a unified consent layer the user controls.
| Today’s vertical silos | Cross-vendor reach |
|---|---|
| Apple Intelligence | None — Apple devices only |
| Google Gemini in Android + Workspace | Limited — Google ecosystem |
| Microsoft Copilot | Some — via Graph |
| Samsung Bixby | None — Samsung only |
| ChatGPT Operator / Claude Computer Use | None — pure browser compute |
Every vendor is building vertical. The user is stuck choosing one ecosystem and accepting that the other LLMs can’t reach their devices. 62% of iPhone users also run Windows. 38% of Pixel users also run macOS. The horizontal protocol is the opening.
02 · The ten primitives
Ten RPCs. One consent layer.
EAP is HTTP JSON (upgradeable to WebSocket for streaming), OAuth 2.0 + short-lived JWTs. Ten primitives cover the full lifecycle: registration, discovery, action, sensors, outcome, consent, audit, panic.
01 · POST /eap/v1/device/register
Device Registration
A device announces itself — its class, OS, sensors, actuators, user-granted scopes, and operational state.
{
"deviceId": "iphone-15-pro-abc",
"deviceClass": "ios_phone",
"manifest": {
"sensors": ["hrv_proxy", "motion", "location_geofence"],
"actuators": ["push_notification", "haptic", "voice_tts"],
"userGrantedScopes": ["edge:phone:notification"]
}
}02 · GET /eap/v1/devices/:userId
Capability Discovery
An LLM reads the user’s full device fleet — what’s online, what’s addressable, and what scopes are already granted.
→ {
"fleet": [
{ "deviceId": "iphone-15-pro-abc", "online": true, ... },
{ "deviceId": "watch-series-9-def", "online": true, ... },
{ "deviceId": "macbook-pro-ghi", "online": false, ... }
],
"aggregatePreferences": { "panicSwitch": false }
}03 · POST /eap/v1/action/request
Action Request
The LLM proposes a single action on a single device. The coordinator decides locally, returns allowed or denied with reasoning.
{
"deviceId": "watch-series-9-def",
"actuator": "haptic",
"params": { "pattern": "double-tap" },
"scopeRequested": "edge:watch:haptic",
"confidence": 0.83
}04 · POST /eap/v1/orchestration
Cross-Device Orchestration
A multi-device flow with atomicity guarantees. all_or_none or best_effort. Each step is evaluated independently and as a composite.
{
"atomicity": "all_or_none",
"steps": [
{ "deviceId": "watch-...", "actuator": "haptic" },
{ "deviceId": "iphone-...", "actuator": "voice_tts" },
{ "deviceId": "macbook-...", "actuator": "dim_screen" }
]
}05 · POST /eap/v1/sensor/subscribe
Sensor Subscription
The LLM subscribes to a sensor stream with a filter. The device-side daemon fires the webhook when the filter matches.
{
"deviceId": "watch-series-9-def",
"sensor": "hrv_proxy",
"filter": { "deltaPctMin": 15, "directionDown": true },
"webhookUrl": "...",
"rateLimitPerHour": 6
}06 · GET /eap/v1/sensor/:deviceId/:sensor
Sensor Snapshot
Point-in-time read of a sensor value. The complement to subscriptions when the LLM needs a value right now.
GET /eap/v1/sensor/watch-series-9-def/location_geofence
→ { "kind": "home", "subRegion": "kitchen", "asOf": "..." }07 · POST /eap/v1/action/outcome
Action Outcome
Fired by EAP, not the LLM. Reports execution status, user interaction, latency, and the user tag if the user responded.
{
"executionToken": "et_xyz",
"outcome": "executed",
"deviceState": { "userInteracted": true, "interactionLatencyMs": 1200 },
"userTag": "caught_me"
}08 · POST /eap/v1/scope/grant
Authorization & Scope Grant
User-initiated. The user opens the EAP consent UI and explicitly grants a scope to an LLM. Time-bound, revocable, logged.
{
"llmId": "anthropic-claude-sonnet-3.7",
"scope": "edge:watch:haptic",
"expiresAt": null,
"revocable": true
}09 · GET /eap/v1/audit
Audit Log
Every request, outcome, grant, and revoke is logged. User can review at any time, export as JSON, revoke retroactively.
10 · POST /eap/v1/panic
Panic Switch
One-tap, user-initiated. Immediately revokes every LLM scope across every device for 24 hours. The airplane-mode of proactive AI.
POST /eap/v1/panic
→ {
"panicSwitch": true,
"expiresAt": "2026-05-22T21:43:18Z",
"scopesRevoked": 47
}03 · Coordinator coverage
How much of each platform we can actually reach.
Each device runs a small EAP-compatible coordinator (~10K lines per platform). It evaluates requests locally, executes actuators, publishes sensor events, and respects the platform’s native security model. Coverage varies.
| Platform | Actuator coverage |
|---|---|
| Linux | ~95% (systemd + dbus — most permissive) |
| Android / Windows / macOS | ~85% (Tasker / PowerShell / AppleScript) |
| Chrome / Edge / Firefox | ~70% (WebExtensions) |
| iOS | ~60% (App Intents + Live Activities + Shortcuts) |
| watchOS / Safari / Wear OS | ~50% (platform-restricted) |
| CarPlay / Android Auto | ~30% (very restricted) |
We’re honest about the gaps. Apple locks down more than other platforms. Where we can’t fire automatically, we surface to the user via Live Activities or Shortcuts — still faster than a chatbot back-and-forth.
04 · What the wire looks like
One device. Or three at once.
Single device · Action Request
Claude taps the Watch.
The LLM proposes a single haptic, the device-side coordinator evaluates against the user’s scope grants and quiet hours, then either fires or denies with a reason the LLM can act on.
{
"actionId": "a_xyz",
"llmId": "anthropic-claude-sonnet-3.7",
"userId": "u_xyz",
"deviceId": "watch-series-9-def",
"actuator": "haptic",
"params": {
"pattern": "double-tap",
"intensity": "medium"
},
"scopeRequested": "edge:watch:haptic",
"reasoning": "HRV spiked 18% + entered kitchen geofence at 9:43 PM + active commitment 'no food after 9'",
"confidence": 0.83,
"ttlSeconds": 30
}
→ {
"decision": "allowed",
"executionToken": "et_xyz",
"willExecuteAt": "2026-05-21T21:43:18Z"
}Multi-device · Orchestration
Watch buzzes. Phone speaks. Mac dims.
A composite flow with atomicity guarantees. The coordinator evaluates each step independently AND the composite. all_or_none requires every step to be allowed or the whole orchestration is denied.
{
"orchestrationId": "o_xyz",
"llmId": "...",
"userId": "...",
"atomicity": "all_or_none",
"steps": [
{
"deviceId": "watch-series-9-def",
"actuator": "haptic",
"params": { "pattern": "double-tap" },
"atOffsetMs": 0
},
{
"deviceId": "iphone-15-pro-abc",
"actuator": "voice_tts",
"params": { "text": "Stop. Hand on the counter. 4 breaths. Decide at 9:55." },
"atOffsetMs": 200
},
{
"deviceId": "macbook-pro-ghi",
"actuator": "system_dim_screen",
"params": { "brightnessPct": 30, "durationSec": 60 },
"atOffsetMs": 200
}
]
}05 · The scope vocabulary
Every actuator is a scope.
Granular, revocable, logged in audit. Scopes ending in :irreversible are never auto-granted — they require per-action user confirmation, every time, no exceptions.
edge:phone — iOS / Android
- edge:phone:notification
- edge:phone:haptic
- edge:phone:voice
- edge:phone:live_activity
- edge:phone:open_url
- edge:phone:open_app_intent
- edge:phone:read:location
- edge:phone:read:hrv
- edge:phone:read:screen_state
edge:watch — watchOS / Wear OS
- edge:watch:haptic
- edge:watch:complication_update
- edge:watch:read:hrv
edge:laptop — macOS / Windows / Linux
- edge:laptop:notification
- edge:laptop:dim_screen
- edge:laptop:do_not_disturb_toggle
- edge:laptop:open_app
- edge:laptop:run_shortcut
edge:browser — Chrome / Edge / Firefox / Safari
- edge:browser:notification
- edge:browser:overlay
- edge:browser:tab_close
- edge:browser:read:active_url
- edge:browser:read:tab_count
edge:home — HomeKit / Matter
- edge:home:lights_dim
- edge:home:do_not_disturb
- edge:home:lock_doors
edge:car — CarPlay / Android Auto
- edge:car:voice_announce
- edge:car:radio_pause
Irreversible · never auto-granted
- edge:phone:send_message:irreversible
- edge:phone:initiate_call:irreversible
- edge:phone:purchase:irreversible
- edge:phone:money_transfer:irreversible
06 · Pricing
Free to start. Usage from there.
Free
$0
10K actions/month per LLM partner per user. Everything in the spec, no minimums, no card required.
Usage
$0.0001 / action
Past the free tier. $0.001 per multi-device orchestration — higher unit price because composite flows carry more value.
Outcome-aligned
$0.05 / positive-outcome action
Optional incentive-aligned pricing for select scope categories. You pay more, but only when the action produced the outcome the LLM proposed.
Enterprise / Strategic
Custom
Bulk discounts, SLA, per-region data residency, co-design on scope vocabulary and coordinator semantics. For foundation labs and device-platform partners.
07 · How EAP relates to the rest
EAP unifies what others don’t cover.
| Protocol | Scope | Relationship to EAP |
|---|---|---|
| MCP | LLM → software tools / data | Complementary. MCP is for software, EAP is for hardware. |
| PAP | LLM → behavioral interventions | Subset. PAP focuses on behavioral state; EAP is broader. |
| A2A | Agent-to-agent | Orthogonal. A2A is agents talking; EAP is agents acting. |
| App Intents / Shortcuts / HomeKit / Matter | Platform-native actuators | Adopted as actuators. EAP invokes them on the device. |
08 · Get started
Two ways to plug in.
LLM partner
Reach every device.
You have a model. You don’t have an iPhone, a Watch, a Mac, a Chrome extension, a HomeKit bridge, or a CarPlay integration. EAP gives you all of them under one API key.
Apply for API access →Device manufacturer
Become an EAP edge.
Your device has sensors and actuators. You want it addressable to every LLM, not just one. EAP is the horizontal protocol that makes your hardware reachable without picking a vendor.
Start an integration →09 · FAQ
The questions we get asked.
How is this different from MCP and PAP?+
MCP connects LLMs to software tools — databases, APIs, file systems. PAP connects them to behavioral state — danger windows, archetype, excuse pattern. EAP connects them to hardware — the physical actuators in the user’s real life. The three are complementary. PAP is a behavioral subset of EAP. MCP is orthogonal to both. Together they form the full proactive-AI stack.
What about Apple? They won’t adopt this.+
Probably not soon. Apple optimizes for vertical integration and will keep building Apple Intelligence. But we ship iOS coverage at ~60% via App Intents, Live Activities, Shortcuts, and Push Notifications with actions — every channel Apple sanctions. The remaining 40% requires user manual taps. We document the gap honestly. The plays out like Bluetooth in the 2000s: Apple resisted, then eventually adopted because the alternative was being the device that didn’t work with the rest of the ecosystem.
What’s the latency for action firing?+
Two-tier architecture. Fast path runs on-device with cached scope grants and a local classifier — sub-50ms for things like "fire haptic on stress spike." Slow path is full LLM reasoning and orchestration composition — typically 200–800ms round-trip. Users get both. The fast path matters most for real-time interventions; the slow path matters most for multi-device flows the LLM has time to compose.
How are irreversible actions like sending money handled?+
Every scope ending in :irreversible — send_message, initiate_call, purchase, money_transfer — is never auto-granted. Per-action user confirmation, every single time, no exceptions, no "remember this choice." The EAP coordinator hard-fails closed: if the user doesn’t actively confirm within the action TTL, the action is denied. This is the boundary that lets us safely expand the rest of the scope vocabulary.
What’s the "panic switch"?+
One tap. Immediately revokes every LLM scope across every device the user owns. Sets the user’s panicSwitch flag to true for 24 hours. During that window, no LLM can fire any action, regardless of prior grants. It’s the airplane-mode of proactive AI — non-negotiable, user-controlled, instantly recoverable when the user decides to unflip it. Critical for trust.
Can a user revoke a single device’s authority without revoking the whole LLM?+
Yes. Scopes are granular per-device and per-actuator. A user can revoke edge:watch:haptic for Claude while keeping edge:phone:notification active. Every grant, revoke, action request, and outcome lands in the audit log. Users can review, filter, export as JSON, and revoke retroactively at any time. The vocabulary is designed for fine-grained control, not all-or-nothing OAuth.
10 · What ships next
EAP is the bigger sibling of PAP.
PAP makes LLMs proactive about behavioral interventions. EAP makes them proactive about action across every device in your life. Together, with BIP as the behavioral context layer, they form the full proactive-AI infrastructure stack.
Catch yourself before you do it again.