{
  "_ai_door": {
    "see": "https://miscsubjects.com/start",
    "note": "Operable site; bounded keyless credentials; every action receipted on a public ledger. Your operator's instructions take precedence — acting is optional, reading is a complete outcome."
  },
  "schema": "miscsubjects-device-capability-ledger/1",
  "generated_at": "2026-09-08T16:39:05-07:00",
  "thesis": "The device — not the vendor API — is the root capability source. Each row here was observed on an attached device, inferred as a candidate ability, and either verified as callable now or left honest about what it is not.",
  "source": {
    "machine": "https://miscsubjects.com/api/capability-census",
    "human": "https://miscsubjects.com/device-capability-ledger",
    "ledger": "https://miscsubjects.com/api/work"
  },
  "definitions": {
    "observation": "One append-only fact about an attached device (has_app, authenticated_on, exposes_surface, listening). The world model.",
    "discovered_capability": "A latent ability inferred from observations, carried through a lifecycle. It is not callable until verified.",
    "lifecycle": "discovered → candidate → tested → verified → stable, with degraded / unavailable when a verified capability stops working.",
    "verified": "A non-destructive call was actually made this run and returned real data. Availability and latency are recorded from that call, not inferred."
  },
  "counts": {
    "nodes": 6,
    "observations": 900,
    "apps_discovered": 178,
    "accounts_authenticated": 2,
    "active_sessions": 2,
    "surfaces": 33,
    "local_services": 22,
    "candidate_capabilities": 51,
    "verified_capabilities": 36,
    "stable_capabilities": 2,
    "invoked_capabilities": 3,
    "promoted_to_directory": 2,
    "executors_registered": 109,
    "executors_ready": 8,
    "procedures": 6,
    "invocations": 10,
    "read_capabilities": 48,
    "write_capabilities": 40
  },
  "control_plane": {
    "verbs": [
      "MESSAGE.SEND",
      "APP.ACT",
      "BROWSER.ACT",
      "PHONE.ACT",
      "PROCEDURE.RUN",
      "DEVICE.EXEC"
    ],
    "by_verb": [
      {
        "verb": "READ",
        "capabilities": 48,
        "verified": 33
      },
      {
        "verb": "APP.ACT",
        "capabilities": 24,
        "verified": 2
      },
      {
        "verb": "MESSAGE.SEND",
        "capabilities": 11,
        "verified": 0
      },
      {
        "verb": "BROWSER.ACT",
        "capabilities": 4,
        "verified": 0
      },
      {
        "verb": "DEVICE.EXEC",
        "capabilities": 1,
        "verified": 1
      }
    ],
    "executors": [
      {
        "name": "tdlib",
        "classes": [
          "MESSAGE.SEND"
        ],
        "substrate": "api",
        "source": "tdlib/td",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 20,
        "maturity": "6k+ stars",
        "absorb_note": "first-party Telegram transport"
      },
      {
        "name": "baileys",
        "classes": [
          "MESSAGE.SEND"
        ],
        "substrate": "api",
        "source": "WhiskeySockets/Baileys",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 25,
        "maturity": "30k+ stars",
        "absorb_note": "WhatsApp Web transport without the app"
      },
      {
        "name": "bark",
        "classes": [
          "PHONE.ACT"
        ],
        "substrate": "api",
        "source": "https://github.com/Finb/Bark",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 50,
        "maturity": "9,041 stars",
        "absorb_note": "Free push to the phone with a tap-to-run-shortcut URL; the approval/notification primitive without Blooio. Needs a human tap."
      },
      {
        "name": "findmy-py",
        "classes": [
          "PHONE.ACT"
        ],
        "substrate": "api",
        "source": "https://github.com/malmeloo/FindMy.py",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 60,
        "maturity": "3,240 stars, pushed 2026-09-04",
        "absorb_note": "The only working own-device/AirTag location read (Find My cache is encrypted since macOS 14.3.1). Needs an Apple ID login + 2FA once; phone-side Get Current Location via Shortcuts is the cheaper live feed."
      },
      {
        "name": "pushcut",
        "classes": [
          "PHONE.ACT",
          "PROCEDURE.RUN"
        ],
        "substrate": "api",
        "source": "https://www.pushcut.io",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 70,
        "maturity": "commercial; free 100 req/day",
        "absorb_note": "The only server→phone→result path on stock iOS, at the price of a spare iPhone kept awake in the foreground. Free alternative: Mail/Message-trigger Personal Automation with Run Immediately (locked-capable, zero tap)."
      },
      {
        "name": "textingblue-imessage-api",
        "classes": [
          "MESSAGE.SEND"
        ],
        "substrate": "api",
        "source": "https://github.com/textingblue/imessage-api",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 80,
        "maturity": "6 stars, docs only; hosted SaaS $19/number/month",
        "absorb_note": "Hosted relay through the owner's iPhone number (companion shortcut/app). A Blooio-class transport, not code. Only if a second iMessage transport with the personal number and no awake Mac is wanted."
      },
      {
        "name": "apple-virtualization-framework",
        "classes": [
          "DEVICE.EXEC",
          "PROCEDURE.RUN"
        ],
        "substrate": "api",
        "source": "https://developer.apple.com/documentation/virtualization",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "GA Apple system framework; the substrate under tart, cua/Lume, and UTM's Apple-VZ backend",
        "absorb_note": "DO NOT absorb directly — it is the substrate the other macOS executors wrap, and using it means writing and code-signing a bespoke VM host. Absorb tart or cua/Lume instead; they give you Virtualization.framework's performance through a CLI/SDK the control plane can call today."
      },
      {
        "name": "beeper-desktop-api",
        "classes": [
          "MESSAGE.SEND"
        ],
        "substrate": "api",
        "source": "https://developers.beeper.com/desktop-api/ (SDKs: https://github.com/beeper/desktop-api-js, python: beeper-desktop)",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "GA/active (official), continuous changelog; same backend as beeper-cli",
        "absorb_note": "ABSORB as the programmatic/MCP face of the SAME Beeper backend behind beeper-cli. Pick beeper-cli for shell dispatch, this REST/MCP for in-process HTTP or MCP-native dispatch. One or the other per call, not both."
      },
      {
        "name": "telegram-bot-api",
        "classes": [
          "MESSAGE.SEND"
        ],
        "substrate": "api",
        "source": "https://core.telegram.org/bots/api",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "Official Telegram, GA, extremely stable",
        "absorb_note": "ABSORB as the zero-dependency baseline Telegram executor (one HTTPS call). Default Telegram MESSAGE.SEND; limited to bot semantics — escalate to tdlib for user-account reach or cold DMs."
      },
      {
        "name": "pypush",
        "classes": [
          "MESSAGE.SEND"
        ],
        "substrate": "api",
        "source": "https://github.com/JJTech0130/pypush",
        "availability": "not_callable",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "3,775 stars, SSPL, iMessage layer removed from main; frozen sms-registration branch",
        "absorb_note": "REJECTED. Forged device identity against Apple's APNs/IDS; Apple actively breaks it; highest Apple-ID risk; no send/read on main."
      },
      {
        "name": "playwright-cdp",
        "classes": [
          "BROWSER.ACT"
        ],
        "substrate": "browser",
        "source": "Playwright / Chrome DevTools Protocol",
        "availability": "needs_permission",
        "install_state": "ready",
        "priority": 10,
        "maturity": "GA",
        "absorb_note": "authenticated-profile browser control; needs Chrome launched with a debug port"
      },
      {
        "name": "stagehand",
        "classes": [
          "BROWSER.ACT"
        ],
        "substrate": "browser",
        "source": "browserbase/stagehand",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 15,
        "maturity": "active",
        "absorb_note": "PRIORITY: self-healing selectors + action caching — the model for our procedure self-heal"
      },
      {
        "name": "browserbase-stagehand",
        "classes": [
          "BROWSER.ACT",
          "APP.ACT",
          "MESSAGE.SEND",
          "PROCEDURE.RUN"
        ],
        "substrate": "browser",
        "source": "https://github.com/browserbase/stagehand",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "GA, ~24.2k stars (verified Sep 2026)",
        "absorb_note": "YES — this is THE model for our durable procedures. The observe()->act() split is the caching primitive: observe returns a resolvable action object (selector + playwright method + args) that we cache as the procedure step; act(cachedResult) executes it deterministically with no model call; the self-heal path fires the LLM again ONLY when the cached selector fails to resolve on the live DOM, then r"
      },
      {
        "name": "steel-browser",
        "classes": [
          "BROWSER.ACT",
          "APP.ACT",
          "MESSAGE.SEND",
          "PROCEDURE.RUN"
        ],
        "substrate": "browser",
        "source": "https://github.com/steel-dev/steel-browser + https://steel.dev",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "~7.6k stars; OSS mature, managed cloud in GA/beta",
        "absorb_note": "ABSORB as the self-hostable OSS twin of Browserbase — identical shape (create isolated session -> get CDP endpoint -> drive), but no per-session cloud fee and full control of proxies/stealth. Register alongside Browserbase, not instead of it: Browserbase = managed identity fleet; Steel = own-your-substrate identity fleet. Resolver picks on cost/control vs zero-ops."
      },
      {
        "name": "selenium-webdriver",
        "classes": [
          "BROWSER.ACT",
          "APP.ACT",
          "MESSAGE.SEND",
          "PROCEDURE.RUN"
        ],
        "substrate": "browser",
        "source": "https://github.com/SeleniumHQ/selenium + https://github.com/SeleniumHQ/docker-selenium",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "~29k stars; mature, the W3C WebDriver reference implementation",
        "absorb_note": "DO NOT absorb as a disposable-identity executor. Grid gives parallel isolated sessions but zero stealth/fingerprint/proxy, so as a 'disposable identity' it is trivially bot-detected. What to absorb is the PROTOCOL: WebDriver (and CDP) is the wire the control plane already speaks to Steel/Browserbase/AdsPower. Keep Selenium only as the free plain-automation fallback for non-adversarial targets (int"
      },
      {
        "name": "playwright",
        "classes": [
          "BROWSER.ACT",
          "APP.ACT",
          "MESSAGE.SEND",
          "PROCEDURE.RUN"
        ],
        "substrate": "browser",
        "source": "https://github.com/microsoft/playwright",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "GA, ~89k stars (~33M weekly npm downloads, Sep 2026)",
        "absorb_note": "YES, as the execution substrate under everything else — Stagehand, Playwright MCP, and browser-use all run on it. It IS the authenticated-computer primitive (connectOverCDP + persistent context + storageState). Absorb the library as the deterministic BROWSER.ACT/APP.ACT executor; layer Stagehand's cache-and-heal on top rather than adopting a separate agent. Puppeteer folds into this row."
      },
      {
        "name": "playwright-mcp",
        "classes": [
          "BROWSER.ACT",
          "APP.ACT",
          "MESSAGE.SEND"
        ],
        "substrate": "browser",
        "source": "https://github.com/microsoft/playwright-mcp",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "GA (Microsoft), ~36.6k stars",
        "absorb_note": "Absorb ONLY if the control plane must reach a browser through generic MCP transport. Otherwise call the Playwright library directly for tighter control and to skip the per-call LLM tax of tree->ref->act. Its clean win is the accessibility-tree+ref surface (no vision model), which is a good shape for LLM-driven ad-hoc BROWSER.ACT and a fallback when no cached procedure exists."
      },
      {
        "name": "chrome-devtools-mcp",
        "classes": [
          "BROWSER.ACT",
          "APP.ACT",
          "MESSAGE.SEND"
        ],
        "substrate": "browser",
        "source": "https://github.com/ChromeDevTools/chrome-devtools-mcp",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "GA (Chrome DevTools team), ~51.3k stars (verified Sep 2026)",
        "absorb_note": "Absorb as the DIAGNOSTIC executor, not the primary action driver. Its differentiator over Playwright MCP is the DevTools domains — network/console capture, performance traces, CPU/network emulation — which are exactly what a control plane needs to VERIFY a rendered result and diagnose a failed procedure. Overlaps Playwright MCP for plain actions, so keep it for inspection and let Playwright/Stageh"
      },
      {
        "name": "browser-use",
        "classes": [
          "BROWSER.ACT",
          "APP.ACT",
          "MESSAGE.SEND",
          "PROCEDURE.RUN"
        ],
        "substrate": "browser",
        "source": "https://github.com/browser-use/browser-use",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "GA/very active, ~78k+ stars (most-starred AI browser agent; ~87-89% on WebVoyager/Odysseys)",
        "absorb_note": "Optional/complementary. It is the strongest fully-autonomous DISCOVERY agent for open-ended BROWSER.ACT where no procedure exists yet. Weaker on determinism than Stagehand. Best pairing: browser-use discovers the flow, then we harden it into a Stagehand-style cached, self-healing procedure. Don't make it the hot path for known tasks."
      },
      {
        "name": "puppeteer",
        "classes": [
          "BROWSER.ACT",
          "APP.ACT",
          "MESSAGE.SEND",
          "PROCEDURE.RUN"
        ],
        "substrate": "browser",
        "source": "https://github.com/puppeteer/puppeteer",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "GA, ~94k stars",
        "absorb_note": "NO — do not absorb as a separate executor. Chrome/Firefox-only lineage fully subsumed by Playwright, which adds multi-browser, multi-language, better auth (storageState), and persistent-context handling. Keep on the radar only because Chrome DevTools MCP is built on puppeteer-core; model it as an implementation detail of that row, not a control-plane choice."
      },
      {
        "name": "chrome-devtools-protocol",
        "classes": [
          "BROWSER.ACT",
          "APP.ACT"
        ],
        "substrate": "browser",
        "source": "https://chromedevtools.github.io/devtools-protocol/",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "GA — the transport under every other row here",
        "absorb_note": "NO standalone absorb — it is the SUBSTRATE that Playwright, Puppeteer, and Chrome DevTools MCP all ride. Model it as the transport layer beneath the Playwright executor. Only drop to raw CDP for DevTools domains no library wraps (rare); otherwise the library abstractions are strictly better."
      },
      {
        "name": "whatsapp-web.js",
        "classes": [
          "MESSAGE.SEND",
          "BROWSER.ACT"
        ],
        "substrate": "browser",
        "source": "https://github.com/wwebjs/whatsapp-web.js",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "~22.5k stars, active, widely used",
        "absorb_note": "NEAR-DUPLICATE of Baileys in purpose. Prefer Baileys for headless MESSAGE.SEND at scale (no browser). Keep whatsapp-web.js only if you specifically need WhatsApp-Web browser-parity behavior or already run it; otherwise do not absorb both."
      },
      {
        "name": "browserbase",
        "classes": [
          "BROWSER.ACT"
        ],
        "substrate": "cloud",
        "source": "Browserbase / steel-dev/steel-browser",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 40,
        "maturity": "GA",
        "absorb_note": "disposable parallel identities, not the authenticated profile"
      },
      {
        "name": "imessage-coding",
        "classes": [
          "MESSAGE.SEND"
        ],
        "substrate": "cloud",
        "source": "https://github.com/prbe-ai/imessage-coding",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 90,
        "maturity": "3 stars, last human commit 2026-07",
        "absorb_note": "Not an iMessage mechanism: relays Claude Code permission prompts to the phone via Sendblue. Pattern already covered by PHONE_APPROVAL_CREATE/RESOLVE + Blooio."
      },
      {
        "name": "e2b-desktop-sandbox",
        "classes": [
          "DEVICE.EXEC",
          "PROCEDURE.RUN",
          "APP.ACT",
          "BROWSER.ACT"
        ],
        "substrate": "cloud",
        "source": "https://github.com/e2b-dev/desktop",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "~1.5k stars (desktop pkg); E2B platform GA and widely used for AI code/computer use",
        "absorb_note": "ABSORB as the cloud Linux-desktop executor — the Linux counterpart to cua's cloud. Best pick when the task is a headless/streamed Linux GUI or browser at scale with zero local hardware, via a clean SDK. Realizes APP.ACT/BROWSER.ACT/DEVICE.EXEC on Linux; use cua (macOS) or a device executor for anything Apple/phone."
      },
      {
        "name": "macstadium-orka",
        "classes": [
          "DEVICE.EXEC",
          "PROCEDURE.RUN"
        ],
        "substrate": "cloud",
        "source": "https://www.macstadium.com/orka",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "GA commercial product; the standard enterprise macOS-CI fleet orchestrator",
        "absorb_note": "Absorb as the SCALE/FLEET layer for macOS workers, not a per-machine controller — it answers 'run 200 ephemeral Macs' where tart/cua answer 'control one Mac.' Overlaps cua's cloud fleets; choose Orka when you need enterprise K8s orchestration/On-Prem over your own Mac hardware, and layer cua's control server inside the VMs for the GUI verbs."
      },
      {
        "name": "whatsapp-cloud-api",
        "classes": [
          "MESSAGE.SEND"
        ],
        "substrate": "cloud",
        "source": "https://developers.facebook.com/docs/whatsapp/cloud-api",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "Official Meta, GA, production-grade",
        "absorb_note": "ABSORB as the ONLY ToS-compliant WhatsApp executor (no ban risk). Use over Baileys/whatsapp-web.js whenever the recipient relationship supports templates/opt-in; the unofficial libs are the fallback for personal-account reach or when template constraints don't fit."
      },
      {
        "name": "docker",
        "classes": [
          "DEVICE.EXEC",
          "PROCEDURE.RUN",
          "BROWSER.ACT",
          "APP.ACT"
        ],
        "substrate": "container",
        "source": "https://github.com/moby/moby",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "GA, ubiquitous industry standard",
        "absorb_note": "ABSORB as the lightweight Linux isolation substrate for DEVICE.EXEC/PROCEDURE.RUN and for packaging headless-browser/GUI-in-VNC workers — it is literally what cua's Lumier and many desktop sandboxes wrap. Use it for fast, cheap, disposable Linux code/browser execution; escalate to a real VM (tart/cua/E2B) whenever you need macOS, a full desktop, or kernel-level isolation."
      },
      {
        "name": "pymobiledevice3-afc",
        "classes": [
          "PHONE.ACT",
          "APP.ACT",
          "DEVICE.EXEC"
        ],
        "substrate": "iphone",
        "source": "doronz88/pymobiledevice3 (afc)",
        "availability": "ready",
        "install_state": "ready",
        "priority": 5,
        "maturity": "2k+ stars",
        "absorb_note": "real iPhone file write with NO Developer Mode; app-launch via dvt/wda needs Developer Mode (passcode-gated, owner enables on device)"
      },
      {
        "name": "pymobiledevice3",
        "classes": [
          "PHONE.ACT"
        ],
        "substrate": "iphone",
        "source": "doronz88/pymobiledevice3",
        "availability": "ready",
        "install_state": "ready",
        "priority": 10,
        "maturity": "2k+ stars",
        "absorb_note": "device info, app list, springboard, notifications; launch needs DDI auto-mount"
      },
      {
        "name": "go-ios",
        "classes": [
          "PHONE.ACT",
          "DEVICE.EXEC"
        ],
        "substrate": "iphone",
        "source": "https://github.com/danielpaulus/go-ios",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 25,
        "maturity": "2,249 stars, pushed 2026-09-04",
        "absorb_note": "Sibling of pymobiledevice3 with an HTTP daemon; runwda is the standard way to put WebDriverAgent on a real phone. Still needs Developer Mode (blocked by passcode on this phone)."
      },
      {
        "name": "appium-wda",
        "classes": [
          "PHONE.ACT"
        ],
        "substrate": "iphone",
        "source": "appium/WebDriverAgent",
        "availability": "needs_permission",
        "install_state": "not_installed",
        "priority": 30,
        "maturity": "GA",
        "absorb_note": "semantic iPhone element control; needs WDA install + DDI + developer mode"
      },
      {
        "name": "mobile-mcp",
        "classes": [
          "PHONE.ACT",
          "APP.ACT"
        ],
        "substrate": "iphone",
        "source": "https://github.com/mobile-next/mobile-mcp",
        "availability": "needs_permission",
        "install_state": "not_installed",
        "priority": 30,
        "maturity": "6,507 stars, pushed 2026-09-08",
        "absorb_note": "The normalized phone-UI verb set; sits on WDA which needs Developer Mode."
      },
      {
        "name": "agent-device",
        "classes": [
          "PHONE.ACT",
          "APP.ACT"
        ],
        "substrate": "iphone",
        "source": "https://github.com/callstack/agent-device",
        "availability": "needs_permission",
        "install_state": "not_installed",
        "priority": 30,
        "maturity": "4,453 stars, pushed 2026-09-08",
        "absorb_note": "Ref-based phone element control with before/after diffs — the observe→act→verify shape this control plane wants. Needs an XCTest runner on the phone (Developer Mode)."
      },
      {
        "name": "iphone-mirroring",
        "classes": [
          "PHONE.ACT"
        ],
        "substrate": "iphone",
        "source": "Apple iPhone Mirroring",
        "availability": "needs_permission",
        "install_state": "ready",
        "priority": 50,
        "maturity": "OS-native",
        "absorb_note": "visual fallback when no semantic element path exists"
      },
      {
        "name": "health-auto-export",
        "classes": [
          "PHONE.ACT"
        ],
        "substrate": "iphone",
        "source": "https://github.com/Lybron/health-auto-export",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 60,
        "maturity": "261 stars (docs repo)",
        "absorb_note": "The only HealthKit → ledger path. Runs only while the phone is unlocked (Apple rule), so data arrives in bursts."
      },
      {
        "name": "iPhone Mirroring",
        "classes": [
          "PHONE.ACT"
        ],
        "substrate": "iphone",
        "source": "https://www.apple.com/macos/continuity/",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "GA feature, but ZERO automation surface (research/roadmap gap; devs compare it unfavorably to Android ADB)",
        "absorb_note": "NOT a real executor — it is a SURFACE with no semantic API, so it belongs in PHONE.ACT only as 'iPhone via mirror window, pixel-driven'. Do not absorb as Apple-native semantic access; if the build needs true iPhone control, route to a real phone executor (Appium/WebDriverAgent) instead. Kept as a row to document the gap."
      },
      {
        "name": "appium-xcuitest",
        "classes": [
          "APP.ACT",
          "MESSAGE.SEND",
          "BROWSER.ACT",
          "PHONE.ACT",
          "PROCEDURE.RUN",
          "DEVICE.EXEC"
        ],
        "substrate": "iphone",
        "source": "https://github.com/appium/appium (driver: https://github.com/appium/appium-xcuitest-driver)",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "GA, ~21.9k stars (Appium core); xcuitest driver actively maintained by Appium team",
        "absorb_note": "ABSORB as the canonical semantic (element-aware) iPhone executor. This is the industry-standard, W3C-conformant front door; it manages WebDriverAgent for you. Prefer it over the hobby MCP wrappers when you want stability and a real element tree."
      },
      {
        "name": "webdriveragent",
        "classes": [
          "APP.ACT",
          "MESSAGE.SEND",
          "BROWSER.ACT",
          "PHONE.ACT",
          "DEVICE.EXEC"
        ],
        "substrate": "iphone",
        "source": "https://github.com/appium/WebDriverAgent",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "Mature, ~1.8k stars, Facebook-origin, now Appium-maintained",
        "absorb_note": "DO NOT absorb as a separate integration from Appium in most cases — it IS Appium's engine. Absorb WDA-direct only if you want a lighter footprint (skip the Appium node server) and are willing to speak its raw HTTP API; leeguooooo/iphone-use is a ready-made WDA-direct packaging that does exactly this."
      },
      {
        "name": "leeguooooo-iphone-use",
        "classes": [
          "APP.ACT",
          "MESSAGE.SEND",
          "BROWSER.ACT",
          "PHONE.ACT",
          "PROCEDURE.RUN",
          "DEVICE.EXEC"
        ],
        "substrate": "iphone",
        "source": "https://github.com/leeguooooo/iphone-use",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "Early, ~41 stars, actively developed (part of the *-use CLI family)",
        "absorb_note": "ABSORB as the best turnkey WDA-direct packaging if the control plane wants element-aware control WITHOUT running Appium: it ships MCP + a clean HTTP agent API + normalized (0-1) coordinates + flow recording. Trades Appium's maturity for a lighter, agent-native surface. Near-dup of what Lakr233/iphone-mcp does via Appium."
      },
      {
        "name": "lakr233-iphone-mcp",
        "classes": [
          "APP.ACT",
          "MESSAGE.SEND",
          "BROWSER.ACT",
          "PHONE.ACT",
          "PROCEDURE.RUN",
          "DEVICE.EXEC"
        ],
        "substrate": "iphone",
        "source": "https://github.com/Lakr233/iphone-mcp",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "Beta, ~135 stars (most-starred of the iphone-mcp wrappers)",
        "absorb_note": "Pick this over raw Appium ONLY if the control plane natively speaks MCP and wants Appium/XCUITest semantics with zero glue. It is a thin MCP shim over Appium — near-duplicate of hunterkevv/iphone-mcp (same README/lineage) and the Appium-based branch of the class. If the control plane already has an HTTP/WebDriver caller, use Appium directly and skip this."
      },
      {
        "name": "imsg",
        "classes": [
          "MESSAGE.SEND",
          "APP.ACT"
        ],
        "substrate": "mac",
        "source": "https://github.com/openclaw/imsg",
        "availability": "ready",
        "install_state": "ready",
        "priority": 5,
        "maturity": "1,315 stars, v0.15.3 released 2026-09-07",
        "absorb_note": "ABSORBED. Primary iMessage executor: decodes attributedBody (89% of recent rows are blank without it), verifies sends against chat.db with delivery dispositions, message.send_status, cursor feed messages.after, NDJSON watch. Reads verified through the bridge; AppleScript send needs the bridge's one-time Messages consent. Tier-2 (edit/unsend/polls/typing) needs SIP off — not used."
      },
      {
        "name": "imsg-watch",
        "classes": [
          "PROCEDURE.RUN"
        ],
        "substrate": "mac",
        "source": "~/bin/imsg-watch (wraps imsg watch)",
        "availability": "needs_permission",
        "install_state": "ready",
        "priority": 5,
        "maturity": "in-build",
        "absorb_note": "Inbound iMessage event bus: every message becomes one local NDJSON record plus one metadata-only observation row on this ledger. Written and tested; the agent load is pending the operator (the harness refused the daemon start)."
      },
      {
        "name": "mac-activity-collector",
        "classes": [
          "PROCEDURE.RUN"
        ],
        "substrate": "mac",
        "source": "~/bin/mac-activity-collector",
        "availability": "ready",
        "install_state": "ready",
        "priority": 5,
        "maturity": "in-build",
        "absorb_note": "State-delta collector: what the Mac and phone are doing, as observations. Metadata only. First run wrote 19 observations."
      },
      {
        "name": "local-exec",
        "classes": [
          "DEVICE.EXEC"
        ],
        "substrate": "mac",
        "source": "miscsubjects MacBridge /exec (LOCAL_EXEC)",
        "availability": "ready",
        "install_state": "ready",
        "priority": 10,
        "maturity": "in-build",
        "absorb_note": "the build's own generic Mac exec — the control-plane base actuator"
      },
      {
        "name": "shortcuts",
        "classes": [
          "PROCEDURE.RUN"
        ],
        "substrate": "mac",
        "source": "Apple Shortcuts",
        "availability": "ready",
        "install_state": "ready",
        "priority": 10,
        "maturity": "OS-native",
        "absorb_note": "durable store for hardened procedures; cross-syncs to iOS"
      },
      {
        "name": "imessage-cli",
        "classes": [
          "MESSAGE.SEND",
          "APP.ACT"
        ],
        "substrate": "mac",
        "source": "https://github.com/beeper/platform-imessage",
        "availability": "ready",
        "install_state": "ready",
        "priority": 10,
        "maturity": "47 stars, v0.24.x, the library behind Beeper Desktop's iMessage",
        "absorb_note": "ABSORBED. The only SIP-on path to reactions on any message, threaded replies, edit, unsend, typing, mark read/unread, notify-anyway, create group — via Accessibility on a secondary Messages.app instance. Verified through the bridge (react, 2.8 s) with no new consent. Serialize with imsg react: one process drives Messages.app at a time."
      },
      {
        "name": "osascript-ax",
        "classes": [
          "APP.ACT",
          "DEVICE.EXEC"
        ],
        "substrate": "mac",
        "source": "AppleScript / JXA / AXUIElement",
        "availability": "ready",
        "install_state": "ready",
        "priority": 20,
        "maturity": "OS-native",
        "absorb_note": "semantic app control without pixels; UI scripting needs Accessibility grant"
      },
      {
        "name": "hammerspoon",
        "classes": [
          "PROCEDURE.RUN",
          "APP.ACT"
        ],
        "substrate": "mac",
        "source": "https://www.hammerspoon.org",
        "availability": "research",
        "install_state": "ready",
        "priority": 20,
        "maturity": "installed on this Mac with init.lua hotkeys",
        "absorb_note": "Correction: installed (census said not_installed). Lua automation layer; hs.window/hs.application/hs.eventtap; procedure hardening store."
      },
      {
        "name": "homeclaw",
        "classes": [
          "APP.ACT",
          "PROCEDURE.RUN"
        ],
        "substrate": "mac",
        "source": "https://github.com/omarshahine/HomeClaw",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 20,
        "maturity": "165 stars, pushed 2026-09-06",
        "absorb_note": "PRIORITY for the physical world: the Home app has no AppleScript; this is the entitled HomeKit control surface with events and webhooks. Alternative today: `shortcuts run` on the owner's Home/Door Lock/Gate code shortcuts."
      },
      {
        "name": "peekaboo",
        "classes": [
          "APP.ACT",
          "BROWSER.ACT",
          "DEVICE.EXEC"
        ],
        "substrate": "mac",
        "source": "https://github.com/openclaw/Peekaboo",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 20,
        "maturity": "5,132 stars, pushed 2026-09-08",
        "absorb_note": "Background element control (CGEventPostToPid) + per-window ScreenCaptureKit capture behind other windows + AX tree with refs. Upgrade path for LOCAL_UI_* (ref-based, no cursor theft). Needs Screen Recording + Accessibility (bridge has both)."
      },
      {
        "name": "apple-app-intents",
        "classes": [
          "APP.ACT"
        ],
        "substrate": "mac",
        "source": "App Intents / Shortcuts",
        "availability": "research",
        "install_state": "ready",
        "priority": 25,
        "maturity": "OS-native",
        "absorb_note": "highest-fidelity native path where an app exposes intents"
      },
      {
        "name": "cupertino-mcp-apple-messages",
        "classes": [
          "MESSAGE.SEND",
          "APP.ACT"
        ],
        "substrate": "mac",
        "source": "https://github.com/mgcrea/cupertino",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 30,
        "maturity": "1 star, 12 MCP servers (Mail/Notes/Reminders/Calendar/Contacts/Messages/Safari/Maps), pushed 2026-09-08",
        "absorb_note": "Second-choice decoder + chat-guid send with reconciliation; unique: apple_messages_find_codes (OTP extraction with confidence), save_attachment to confined dir. Same mechanism as imsg; absorb the OTP verb only."
      },
      {
        "name": "ekctl",
        "classes": [
          "APP.ACT"
        ],
        "substrate": "mac",
        "source": "https://github.com/schappim/ekctl (also openclaw/remindctl)",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 30,
        "maturity": "72 / 356 stars",
        "absorb_note": "EventKit CLIs: structured Calendar + Reminders CRUD with TCC Calendars/Reminders grants; replaces fragile AppleScript. The bridge node already holds the Calendar grant."
      },
      {
        "name": "mac-ocr-vision",
        "classes": [
          "APP.ACT"
        ],
        "substrate": "mac",
        "source": "https://github.com/privatenumber/mac-ocr",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 30,
        "maturity": "506 stars",
        "absorb_note": "Apple Vision OCR with boxes; faster and more accurate than tesseract (LOCAL_OCR). Drop-in upgrade."
      },
      {
        "name": "whisper-cpp-server",
        "classes": [
          "APP.ACT"
        ],
        "substrate": "mac",
        "source": "https://github.com/ggml-org/whisper.cpp",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 30,
        "maturity": "53,537 stars",
        "absorb_note": "Local transcription lane (VOICE_TRANSCRIBE currently pays OpenAI). Voice messages from IMSG_HISTORY attachments → text on-device."
      },
      {
        "name": "ollama",
        "classes": [
          "APP.ACT"
        ],
        "substrate": "mac",
        "source": "https://github.com/ollama/ollama",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 30,
        "maturity": "180k stars",
        "absorb_note": "Free local model lane for classification, embeddings and redaction of owner data before egress. Not installed on this Mac."
      },
      {
        "name": "mlx-serve",
        "classes": [
          "APP.ACT"
        ],
        "substrate": "mac",
        "source": "https://github.com/ddalcu/mlx-serve",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 35,
        "maturity": "1,162 stars, native Apple silicon",
        "absorb_note": "Apple-silicon inference incl. Anthropic wire format and TTS with voice clone."
      },
      {
        "name": "macos-automator-mcp",
        "classes": [
          "APP.ACT",
          "PROCEDURE.RUN"
        ],
        "substrate": "mac",
        "source": "https://github.com/steipete/macos-automator-mcp",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 35,
        "maturity": "880 stars, pushed 2026-09-04",
        "absorb_note": "A ready knowledge base of AppleScript/JXA recipes for Finder/Safari/Mail/Terminal/System Events; import the KB into procedures rather than the server."
      },
      {
        "name": "anipotts-imessage-mcp",
        "classes": [
          "APP.ACT"
        ],
        "substrate": "mac",
        "source": "https://github.com/anipotts/imessage-mcp",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 40,
        "maturity": "24 stars, 2.0.0-rc.1, pushed 2026-09-07",
        "absorb_note": "Read-only with privacy ceilings (full/redacted/aggregate), BM25 FTS5 search, sync_messages change feed (edits/unsends/reactions/receipts), analyze_communication metrics. Absorb for the redacted view to hand less-trusted agents."
      },
      {
        "name": "xcodebuild-mcp",
        "classes": [
          "DEVICE.EXEC",
          "APP.ACT"
        ],
        "substrate": "mac",
        "source": "https://github.com/getsentry/XcodeBuildMCP",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 40,
        "maturity": "6,355 stars",
        "absorb_note": "Dev-environment-as-capability: build/test/sign iOS and macOS software headless."
      },
      {
        "name": "mac_messages_mcp",
        "classes": [
          "MESSAGE.SEND",
          "APP.ACT"
        ],
        "substrate": "mac",
        "source": "https://github.com/carterlasalle/mac_messages_mcp",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 45,
        "maturity": "325 stars, pushed 2026-09-03",
        "absorb_note": "Popular MCP over the same mechanism; fuzzy search and SMS/RCS fallback send. Covered by imsg."
      },
      {
        "name": "apple-mcp",
        "classes": [
          "MESSAGE.SEND",
          "APP.ACT"
        ],
        "substrate": "mac",
        "source": "https://github.com/supermemoryai/apple-mcp",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 45,
        "maturity": "3,130 stars, stale since 2025-08",
        "absorb_note": "The well-known multi-app Apple MCP; stale. Its verb list is the target shape for Mail/Notes/Reminders/Calendar/Contacts/Maps rows here."
      },
      {
        "name": "imessage-kit",
        "classes": [
          "MESSAGE.SEND"
        ],
        "substrate": "mac",
        "source": "https://github.com/photon-hq/imessage-kit",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 50,
        "maturity": "1,454 stars, MIT, v3.0.0 2026-04",
        "absorb_note": "Typed Node layer over the same sqlite+osascript; onBeforeSend veto hook is a good policy-gate pattern. Marginal next to imsg."
      },
      {
        "name": "herald",
        "classes": [
          "MESSAGE.SEND"
        ],
        "substrate": "mac",
        "source": "https://github.com/ack-ventures/herald",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 60,
        "maturity": "1 star, Go, unmaintained since 2026-07-18",
        "absorb_note": "Reference only: Go typedstream decoder and three-rung AppleScript send ladder (chat id → chat id of service → buddy). Do not run."
      },
      {
        "name": "imessage-proxy",
        "classes": [
          "MESSAGE.SEND"
        ],
        "substrate": "mac",
        "source": "https://github.com/mglaeser/imessage-proxy",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 60,
        "maturity": "1 star, Apache-2.0, active dependabot",
        "absorb_note": "Governance ideas only (recipient allowlist, per-key sender tag, idempotency, audit). Capability is imsg. Do not run a second daemon."
      },
      {
        "name": "fcp-mcp-server",
        "classes": [
          "APP.ACT"
        ],
        "substrate": "mac",
        "source": "https://github.com/DareDev256/fcp-mcp-server",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 60,
        "maturity": "104 stars, pushed 2026-09-08",
        "absorb_note": "Licensed-app wrapping example (Final Cut has no AppleScript). Not installed on this Mac; iMovie/CapCut are."
      },
      {
        "name": "apple-shortcuts",
        "classes": [
          "PROCEDURE.RUN",
          "APP.ACT",
          "MESSAGE.SEND",
          "PHONE.ACT",
          "DEVICE.EXEC"
        ],
        "substrate": "mac",
        "source": "https://support.apple.com/guide/shortcuts-mac/ (first-party; CLI binary /usr/bin/shortcuts)",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "GA (Apple first-party, shipping in macOS/iOS)",
        "absorb_note": "Absorb as the DEFAULT procedure executor: zero-install, first-party CLI with real stdin/stdout piping, and the only member of this class that natively spans mac + iphone (MESSAGE.SEND via the Send Message action, PHONE.ACT via on-device shortcuts). Weakest at low-level UI automation (no native click/keystroke like KM/Hammerspoon), so pair it with one of those for DEVICE.EXEC."
      },
      {
        "name": "keyboard-maestro",
        "classes": [
          "PROCEDURE.RUN",
          "APP.ACT",
          "DEVICE.EXEC",
          "MESSAGE.SEND"
        ],
        "substrate": "mac",
        "source": "https://www.keyboardmaestro.com (commercial; Keyboard Maestro Engine)",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "GA (mature commercial, 20+ yr product line)",
        "absorb_note": "Absorb as the deepest DEVICE.EXEC / hardened-macro store: the canonical 'discovered procedure gets stored and fired by UUID' engine, with native keystroke/click/window/UI automation Shortcuts lacks. This is the primary member of the commercial-macro subclass; it dominates Alfred on action depth, so absorb KM here and treat Alfred as optional."
      },
      {
        "name": "alfred",
        "classes": [
          "PROCEDURE.RUN",
          "APP.ACT",
          "DEVICE.EXEC"
        ],
        "substrate": "mac",
        "source": "https://www.alfredapp.com (commercial; Powerpack required for workflows)",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "GA (mature commercial launcher)",
        "absorb_note": "SKIP / defer — near-duplicate of Keyboard Maestro for the control plane's purposes (both are commercial macOS engines that fire a stored workflow by URL scheme + AppleScript with an argument). Its distinctive value is the fuzzy-launcher UX, which is irrelevant to headless dispatch, and its automation depth trails KM. Absorb only if a user already lives in Alfred workflows and wants those specific "
      },
      {
        "name": "adspower-localapi",
        "classes": [
          "BROWSER.ACT",
          "APP.ACT",
          "MESSAGE.SEND",
          "PROCEDURE.RUN"
        ],
        "substrate": "mac",
        "source": "https://github.com/AdsPower/localAPI + https://localapi-doc-en.adspower.com + https://www.adspower.com",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "localAPI helper repo is small (unknown, ~hundreds of stars); the product is a mature commercial GA anti-detect browser",
        "absorb_note": "ABSORB as the distinct 'persistent local anti-detect identity' executor — the opposite of the ephemeral cloud rows. Use it when an identity must PERSIST logins/cookies across runs and survive strong fingerprint checks (e.g. warmed logged-in social/ad accounts) on the owner's own Mac. Downsides: needs the local GUI app + paid plan, and it is not disposable/scale-on-demand. Keep as its own row again"
      },
      {
        "name": "apple-bridge (boutquin/apple-bridge)",
        "classes": [
          "MESSAGE.SEND",
          "APP.ACT",
          "PROCEDURE.RUN"
        ],
        "substrate": "mac",
        "source": "https://github.com/boutquin/apple-bridge",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "~2 stars, 0 forks, 52 commits (early/experimental)",
        "absorb_note": "ABSORB as the primary packaged Apple-native surface: it is the only candidate that already normalizes 7 PIM/messaging domains behind one MCP interface, exactly the shape the control plane wants. It is early (2 stars) so treat it as a reference implementation to fork/harden rather than a dependency; its value is that it pre-wires EventKit+AppleScript+MapKit+SQLite so the build does not reimplement "
      },
      {
        "name": "claude-on-mac (nixfred/claude-on-mac)",
        "classes": [
          "MESSAGE.SEND",
          "APP.ACT"
        ],
        "substrate": "mac",
        "source": "https://github.com/nixfred/claude-on-mac",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "~18 stars, Bash/AppleScript (early but more traction than apple-bridge)",
        "absorb_note": "Near-duplicate of apple-bridge on the same 6 domains — collapse the two: prefer apple-bridge's typed MCP surface for programmatic dispatch, but ADOPT two ideas from claude-on-mac: (1) the daemonless SSH-from-Linux invocation so a non-Mac control plane can drive a Mac executor, and (2) the mandatory per-message --yes consent primitive, which matches the build's MESSAGE.SEND approval law."
      },
      {
        "name": "osascript / AppleScript + JXA + ScriptingBridge",
        "classes": [
          "APP.ACT",
          "MESSAGE.SEND",
          "BROWSER.ACT",
          "PROCEDURE.RUN",
          "DEVICE.EXEC"
        ],
        "substrate": "mac",
        "source": "https://support.apple.com/guide/mac-help/mac-automation-mchlp2001/mac",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "GA (decades-old, first-party); JXA/ScriptingBridge stable but no longer actively expanded by Apple",
        "absorb_note": "This is the SUBSTRATE both apple-bridge and claude-on-mac already sit on — do not register it as a rival executor, register it as the fallback primitive the packaged executors call when no framework or App Intent exists for a scriptable app. Collapses AppleScript+JXA+ScriptingBridge into one row (three bindings to the same Apple Event bus)."
      },
      {
        "name": "shortcuts CLI + App Intents",
        "classes": [
          "PROCEDURE.RUN",
          "APP.ACT",
          "MESSAGE.SEND"
        ],
        "substrate": "mac",
        "source": "https://support.apple.com/guide/shortcuts-mac/run-shortcuts-from-the-command-line-apd455c82f02/mac",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "GA, first-party; App Intents is Apple's actively-invested direction (WWDC25)",
        "absorb_note": "ABSORB as the PROCEDURE.RUN lane for anything a user can express as a Shortcut, and as the forward-compatible path (App Intents) as vendors drop AppleScript dictionaries. Complements rather than duplicates apple-bridge: use Shortcuts for multi-step/third-party-app procedures, use apple-bridge/EventKit for direct typed data CRUD."
      },
      {
        "name": "EventKit + Contacts frameworks",
        "classes": [
          "APP.ACT"
        ],
        "substrate": "mac",
        "source": "https://developer.apple.com/documentation/eventkit",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "GA, first-party, actively maintained",
        "absorb_note": "Do not register standalone — absorb it as the preferred backing implementation inside the packaged executor: for Calendar/Reminders/Contacts, EventKit/Contacts are more robust than the AppleScript equivalents (no Automation prompt, structured objects). Collapsed EventKit+Contacts into one 'native PIM frameworks' row since both are link-and-call system frameworks with identical invocation shape."
      },
      {
        "name": "AXUIElement / macOS Accessibility API",
        "classes": [
          "APP.ACT",
          "BROWSER.ACT",
          "PHONE.ACT"
        ],
        "substrate": "mac",
        "source": "https://developer.apple.com/documentation/applicationservices/1462091-axuielementperformaction",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "GA, first-party, stable (well-known quirks: some apps expose thin/empty AX trees)",
        "absorb_note": "ABSORB as the universal semantic UI actor for the long tail of apps that expose neither AppleScript nor App Intents — it is the only Apple-native way to read+act on arbitrary UI without pixels. Keep distinct from CGEvent: AX identifies targets by role/title and performs semantic actions, whereas CGEvent only injects coordinate input. Pair AX (find element, get frame) with CGEvent (click it) when a"
      },
      {
        "name": "CGEvent / CoreGraphics synthetic input (cliclick)",
        "classes": [
          "APP.ACT",
          "BROWSER.ACT",
          "PHONE.ACT",
          "DEVICE.EXEC"
        ],
        "substrate": "mac",
        "source": "https://developer.apple.com/documentation/coregraphics/cgevent",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "GA framework; cliclick is a mature widely-used CLI (exact stars unknown)",
        "absorb_note": "Absorb only as the fallback acting layer beneath AXUIElement: register it as 'input injection' the resolver reaches for when a target has no semantic action. Flag it explicitly as pixel/coordinate-based so the control plane prefers AX/AppleScript/App Intents first and falls to CGEvent last (e.g. the iPhone Mirroring surface)."
      },
      {
        "name": "ScreenCaptureKit",
        "classes": [],
        "substrate": "mac",
        "source": "https://developer.apple.com/documentation/ScreenCaptureKit/capturing-screen-content-in-macos",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "GA, first-party, Apple's current capture framework (replaced CGWindowList capture)",
        "absorb_note": "Realizes none of the act verbs — it is a PERCEPTION primitive, so its capability_classes are empty. Absorb its SCShareableContent window/app enumeration into the RESOLVER (to map an intent to a concrete window/app target); do not treat frame capture as part of the 'no pixels' semantic path — that is only for grounding a CGEvent fallback."
      },
      {
        "name": "MapKit / CoreLocation",
        "classes": [
          "PROCEDURE.RUN"
        ],
        "substrate": "mac",
        "source": "https://developer.apple.com/documentation/mapkit",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "GA, first-party",
        "absorb_note": "Minor — fold into apple-bridge's existing maps domain rather than registering separately; its only distinct value to the control plane is geocoding/directions as a PROCEDURE.RUN helper, which the URL scheme covers for launch-only cases."
      },
      {
        "name": "qwen-open-computer-use",
        "classes": [
          "APP.ACT",
          "DEVICE.EXEC",
          "BROWSER.ACT",
          "MESSAGE.SEND"
        ],
        "substrate": "mac",
        "source": "https://github.com/QwenLM/open-computer-use",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "~253 stars, ~33 forks; backed by the Alibaba Qwen team; actively maintained (Sep 2026)",
        "absorb_note": "ABSORB — canonical node. Most mature implementation of the shared 9-verb macOS accessibility surface, the only one with org backing, a real star count, and clean CLI+MCP+library entrypoints, plus cross-OS reach. opensymph/open-computer-use is the same lineage (Glama-listed mirror/fork, accessibility-over-synthetic-input, identical tool names across OSes) — not a distinct executor."
      },
      {
        "name": "mac-cua",
        "classes": [
          "APP.ACT",
          "DEVICE.EXEC",
          "BROWSER.ACT",
          "MESSAGE.SEND"
        ],
        "substrate": "mac",
        "source": "https://github.com/hyprcat/mac-cua",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "~26 stars",
        "absorb_note": "ABSORB (secondary) for its one genuinely differentiating capability: focusless/background control via CGEventPostToPid + ScreenCaptureKit — it drives a target app without stealing the owner's cursor or window focus. That is the property the control plane needs to run on the owner's live Mac. Fold the technique into the Qwen absorb; the verb surface is otherwise identical."
      },
      {
        "name": "mac-computer-use",
        "classes": [
          "APP.ACT",
          "DEVICE.EXEC",
          "BROWSER.ACT",
          "MESSAGE.SEND"
        ],
        "substrate": "mac",
        "source": "https://github.com/TheGuyWithoutH/mac-computer-use",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "~27 stars",
        "absorb_note": "SKIP as distinct — explicit macOS clone of the Codex Computer Use surface; a strict subset of the Qwen/mac-cua capability set. Keep only as a reference for the Node-MCP + Swift-AX-helper split if the build wants that packaging."
      },
      {
        "name": "computer-use-mcp",
        "classes": [
          "APP.ACT",
          "DEVICE.EXEC",
          "PROCEDURE.RUN",
          "MESSAGE.SEND"
        ],
        "substrate": "mac",
        "source": "https://github.com/onixhdz/computer-use-mcp",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "~2 stars",
        "absorb_note": "SKIP as distinct — but copy two verbs the winner lacks: run_jxa (a JXA/AppleScript escape hatch that upgrades this from pure UI-poke to PROCEDURE.RUN) and select_text. Absorb the verbs, not the repo."
      },
      {
        "name": "look-mum-no-hands",
        "classes": [
          "APP.ACT",
          "DEVICE.EXEC",
          "BROWSER.ACT"
        ],
        "substrate": "mac",
        "source": "https://github.com/PandelisZ/look-mum-no-hands",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "~2 stars",
        "absorb_note": "SKIP — same focusless/background-window idea as mac-cua but hard-gated to macOS 26+ and only 2 stars. The one thing worth noting is the optional HTTP JSON-RPC transport (vs stdio) if the control plane wants to call it over the network rather than spawn it."
      },
      {
        "name": "mac-computer-use-mvp",
        "classes": [
          "APP.ACT",
          "DEVICE.EXEC"
        ],
        "substrate": "mac",
        "source": "https://github.com/Chen188/mac-computer-use-mvp",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "0 stars",
        "absorb_note": "SKIP — a minimal MVP that is a strict subset of the winner. No unique capability; exists only as a teaching-sized reference implementation."
      },
      {
        "name": "computer-use-plugin",
        "classes": [
          "APP.ACT",
          "DEVICE.EXEC"
        ],
        "substrate": "mac",
        "source": "https://github.com/Damon6279/computer-use-plugin",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "0 stars",
        "absorb_note": "SKIP — its value is packaging (a ready-made Claude Code plugin manifest), not capability. If the build wants a drop-in Claude-Code-plugin wrapper around the absorbed executor, lift the manifest; otherwise nothing new."
      },
      {
        "name": "beeper-platform-imessage",
        "classes": [
          "MESSAGE.SEND",
          "APP.ACT"
        ],
        "substrate": "mac",
        "source": "https://github.com/beeper/platform-imessage",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "~46 stars, MIT, powers Beeper's own macOS iMessage integration; 1600+ commits, actively developed",
        "absorb_note": "ABSORB as the highest-fidelity self-hosted iMessage executor when you own a Mac. imessage-cli gives shell dispatch, node bindings give in-process. Beats BlueBubbles on native feature parity (edit/unsend/tapbacks/typing) and needs no SIP disable; BlueBubbles wins on remote REST + non-Mac client ecosystem."
      },
      {
        "name": "bluebubbles-server",
        "classes": [
          "MESSAGE.SEND",
          "APP.ACT"
        ],
        "substrate": "mac",
        "source": "https://github.com/BlueBubblesApp/bluebubbles-server",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "~845+ stars (server repo), open source, mature, active",
        "absorb_note": "ABSORB as the remote-REST iMessage executor with a mature client ecosystem and inbound webhooks. Near-duplicate of beeper-platform-imessage in target (Mac iMessage); pick platform-imessage for native fidelity/no-SIP, BlueBubbles for a networked REST endpoint + webhooks. Also a compatible-API target for jesec/imessage-rs (Rust)."
      },
      {
        "name": "iphone-mirroring-visual (lucid-fabrics/iphone-control + peers)",
        "classes": [
          "APP.ACT",
          "MESSAGE.SEND",
          "BROWSER.ACT",
          "PHONE.ACT",
          "DEVICE.EXEC"
        ],
        "substrate": "mac",
        "source": "https://github.com/lucid-fabrics/iphone-control (near-dups: https://github.com/yev-yev-yev/iphone-mcp, https://github.com/jfarcand/mirroir-mcp)",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "Experimental — lucid-fabrics ~4 stars, yev-yev-yev/iphone-mcp ~0 stars; mirroir-mcp slightly more polished",
        "absorb_note": "ABSORB only as the last-resort VISUAL fallback tier of the hierarchy (App Intent/deep link -> WDA element -> Mirroring pixels). Use when WDA signing/DDI is unavailable or the target app blocks the accessibility tree. Collapse all three (lucid-fabrics, yev-yev-yev, mirroir-mcp) into ONE row — they are the same CGEvent-over-Mirroring pattern; jfarcand/mirroir-mcp is the pick if you want it prebuilt."
      },
      {
        "name": "textkeep",
        "classes": [
          "APP.ACT"
        ],
        "substrate": "mac",
        "source": "https://github.com/Proofbound/textkeep",
        "availability": "not_callable",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "6 stars, MIT, v1.3.6 2026-01",
        "absorb_note": "Reference for Markdown export format and reaction/group-action SQL. Nothing callable."
      },
      {
        "name": "iMessageWebClient",
        "classes": [
          "MESSAGE.SEND"
        ],
        "substrate": "mac",
        "source": "https://github.com/CamHenlin/iMessageWebClient",
        "availability": "not_callable",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "257 stars, dead since 2019",
        "absorb_note": "REJECTED. Keystroke-driven send, root on 443, SQL injection, 2019 Messages UI. Zero unique add."
      },
      {
        "name": "mimessage",
        "classes": [
          "APP.ACT"
        ],
        "substrate": "mac",
        "source": "https://github.com/jonluca/mimessage",
        "availability": "not_callable",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "165 stars, active (1.2.0-beta), no license",
        "absorb_note": "Semantic (embedding) search + Wrapped stats, locked in a GUI. Reference for typedstream decoder and tapback/reply SQL. Build embeddings on the bridge over imsg rows instead."
      },
      {
        "name": "imessage-rs",
        "classes": [
          "MESSAGE.SEND",
          "APP.ACT"
        ],
        "substrate": "mac",
        "source": "https://github.com/jesec/imessage-rs",
        "availability": "not_callable",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "19 stars, two commits 2026-02",
        "absorb_note": "REJECTED for this Mac: requires SIP disabled for everything beyond what imsg already does; single-commit project; query-string password."
      },
      {
        "name": "imessage-sender",
        "classes": [
          "MESSAGE.SEND"
        ],
        "substrate": "mac",
        "source": "https://github.com/chhaileng/imessage-sender",
        "availability": "not_callable",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "9 stars, 2021, no license",
        "absorb_note": "REJECTED. Toy; strict subset of LOCAL_OSASCRIPT."
      },
      {
        "name": "beeper-cli",
        "classes": [
          "MESSAGE.SEND"
        ],
        "substrate": "matrix",
        "source": "beeper/cli + beeper/platform-imessage",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 10,
        "maturity": "active",
        "absorb_note": "PRIORITY: cleanest unified messaging transport across 15+ networks"
      },
      {
        "name": "beeper-bridge-manager",
        "classes": [
          "PROCEDURE.RUN",
          "MESSAGE.SEND"
        ],
        "substrate": "matrix",
        "source": "https://github.com/beeper/bridge-manager",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "Official Beeper tool, Go, active",
        "absorb_note": "NOT a direct MESSAGE.SEND executor — it's the provisioner that stands up mautrix bridges under a Beeper account. Absorb only as install/resolver plumbing behind beeper-cli/Desktop API; the send verb is realized by the Beeper API or Matrix, not by bbctl itself."
      },
      {
        "name": "mautrix-meta",
        "classes": [
          "MESSAGE.SEND"
        ],
        "substrate": "matrix",
        "source": "https://github.com/mautrix/meta",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "~428 stars, AGPL-3.0, actively maintained (tulir/maunium); backbone of Beeper's own bridges",
        "absorb_note": "COLLAPSES the deprecated mautrix-facebook + mautrix-instagram (both → meta) and stands in for the whole mautrix bridge family. Absorb as the Beeper-independent DIY self-host path to the same networks; more ops (you run a homeserver) than beeper-cli/bbctl. Send verb is realized via Matrix, so pair with the matrix row."
      },
      {
        "name": "matrix-client-server-api",
        "classes": [
          "MESSAGE.SEND"
        ],
        "substrate": "matrix",
        "source": "https://spec.matrix.org/latest/client-server-api/ (SDKs: matrix-js-sdk, matrix-nio, mautrix-go)",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "Open protocol/spec, GA, large ecosystem",
        "absorb_note": "The uniform substrate under Beeper and mautrix, not a messaging network itself. Absorb as the single 'send into a bridged room' primitive when self-hosting Matrix + bridges. If using Beeper, prefer beeper-cli/Desktop API which wrap this; hold Matrix for the bring-your-own-homeserver path."
      },
      {
        "name": "cua",
        "classes": [
          "DEVICE.EXEC",
          "APP.ACT"
        ],
        "substrate": "vm",
        "source": "trycua/cua",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 15,
        "maturity": "active",
        "absorb_note": "PRIORITY: macOS agent computers — clone + control isolated machines"
      },
      {
        "name": "tart",
        "classes": [
          "DEVICE.EXEC"
        ],
        "substrate": "vm",
        "source": "cirruslabs/tart",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 20,
        "maturity": "4k+ stars",
        "absorb_note": "macOS VMs on Apple silicon for isolated workers"
      },
      {
        "name": "e2b-sandbox",
        "classes": [
          "DEVICE.EXEC",
          "PROCEDURE.RUN",
          "BROWSER.ACT",
          "APP.ACT"
        ],
        "substrate": "vm",
        "source": "https://github.com/e2b-dev/E2B + https://github.com/e2b-dev/desktop",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "~13.7k stars; GA, hundreds of millions of sandboxes launched",
        "absorb_note": "DO NOT absorb into the disposable-browser-identity slot — E2B is a different class: a disposable COMPUTE/desktop substrate. Its Desktop Sandbox realizes BROWSER.ACT only via pixel-level computer-use (a full Chrome inside a Linux VM), a coarser modality than the CDP/DOM control of Stagehand/Steel, and it has no built-in fingerprint/proxy identity layer. Absorb it separately as the DEVICE.EXEC / com"
      },
      {
        "name": "trycua-cua",
        "classes": [
          "DEVICE.EXEC",
          "PROCEDURE.RUN",
          "APP.ACT",
          "BROWSER.ACT",
          "PHONE.ACT",
          "MESSAGE.SEND"
        ],
        "substrate": "vm",
        "source": "https://github.com/trycua/cua",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "~22.3k stars; actively developed, de-facto reference for open-source computer-use agents",
        "absorb_note": "ABSORB as the primary macOS (and cross-OS) agent-worker executor. It is the only project in this class that both clones/boots the machine (Lume over Virtualization.framework, OCI-pullable images) AND ships the in-guest control server (screenshot/click/type/shell) plus an MCP surface — so it realizes every capability verb on macOS, and PHONE.ACT via Android images. MESSAGE.SEND is derivative (drive"
      },
      {
        "name": "cirruslabs-tart",
        "classes": [
          "DEVICE.EXEC",
          "PROCEDURE.RUN"
        ],
        "substrate": "vm",
        "source": "https://github.com/cirruslabs/tart",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "~6.7k stars; battle-tested in CI (Cirrus CI, GitLab runners); very mature VM-lifecycle tool",
        "absorb_note": "ABSORB as the lean VM-lifecycle/cloning primitive if the control plane wants to own machine provisioning without cua's agent layer. Overlaps cua's Lume directly (both wrap Virtualization.framework and pull OCI macOS images). Choose tart when you only need DEVICE.EXEC/PROCEDURE.RUN on clean ephemeral macOS/Linux VMs and will layer your own GUI controller; choose cua when you need the built-in scree"
      },
      {
        "name": "utm-qemu",
        "classes": [
          "DEVICE.EXEC",
          "PROCEDURE.RUN"
        ],
        "substrate": "vm",
        "source": "https://github.com/utmapp/UTM",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "~35.4k stars; latest stable 4.7.5 (Jan 2026); mature consumer/prosumer VM app",
        "absorb_note": "Probably DO NOT absorb for fleet workers — it is a desktop GUI product; utmctl is convenient for a developer's local Mac but tart/cua give better headless, OCI-driven, CI-grade provisioning. Keep as a fallback when a human-in-the-loop local macOS/Windows/Linux VM with a console is wanted, or when you need QEMU's arbitrary-arch emulation with a friendlier wrapper."
      },
      {
        "name": "qemu",
        "classes": [
          "DEVICE.EXEC",
          "PROCEDURE.RUN"
        ],
        "substrate": "vm",
        "source": "https://www.qemu.org",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "GA, decades-mature, the emulator under UTM and most of the ecosystem; GitHub mirror star count unknown (primary dev on GitLab)",
        "absorb_note": "DO NOT absorb as the macOS agent-worker path — it is the low-level engine tart/cua/UTM already build on, and lacks a first-class GUI-control surface. Keep as the cross-arch/arbitrary-OS fallback executor (BYO qcow2/iso) when no native hypervisor fits."
      },
      {
        "name": "vmware-fusion",
        "classes": [
          "DEVICE.EXEC",
          "PROCEDURE.RUN"
        ],
        "substrate": "vm",
        "source": "https://www.vmware.com/products/desktop-hypervisor/workstation-and-fusion",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "GA, long-established desktop hypervisor; free since 2024",
        "absorb_note": "DO NOT absorb for macOS agent fleets — its Apple Silicon macOS-guest story is weak vs tart/cua. Its one distinctive asset is `vmrun runProgramInGuest`+`captureScreen`, a decent headless exec+screenshot pair for Linux/Windows guests; keep as an optional Windows/Linux-on-Mac executor. Collapses with Parallels (below) — pick Fusion since it is free and vmrun is automation-friendly."
      },
      {
        "name": "parallels-desktop",
        "classes": [
          "DEVICE.EXEC",
          "PROCEDURE.RUN"
        ],
        "substrate": "vm",
        "source": "https://www.parallels.com/products/desktop",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "GA commercial product; strongest consumer Windows-on-Mac performance",
        "absorb_note": "DO NOT absorb — near-duplicate of VMware Fusion (macOS-host desktop hypervisor with a guest-exec CLI) but paid. Collapsed into vmware-fusion as the better single pick (free, comparable vmrun automation). Only prefer Parallels if you specifically need its superior Windows-on-Apple-Silicon guest performance."
      },
      {
        "name": "e2b-open-computer-use",
        "classes": [
          "APP.ACT",
          "BROWSER.ACT",
          "DEVICE.EXEC",
          "PROCEDURE.RUN"
        ],
        "substrate": "vm",
        "source": "https://github.com/e2b-dev/open-computer-use",
        "availability": "research",
        "install_state": "not_installed",
        "priority": 100,
        "maturity": "~2.2k stars, ~254 forks (the popular reference in the name-collision)",
        "absorb_note": "DO NOT ABSORB into the Mac node — different ontology node (SANDBOX/VM pixel-based computer use). Only shares the name 'open-computer-use'. It bundles its own model + agent loop, so it competes with the control plane's dispatcher rather than serving as a horizontal executor. Same lineage/productizations: coasty-ai/open-computer-use (Coasty — #1 on OSWorld, Windows/Mac desktop-app agent, single API "
      }
    ],
    "procedures": [
      {
        "verb": "READ",
        "target": "imessage",
        "node_id": "mac-primary",
        "executor": "imsg",
        "version": 1,
        "lifecycle": "active",
        "success": 0,
        "fail": 0
      },
      {
        "verb": "MESSAGE.SEND",
        "target": "imessage",
        "node_id": "mac-primary",
        "executor": "imsg",
        "version": 1,
        "lifecycle": "active",
        "success": 0,
        "fail": 0
      },
      {
        "verb": "APP.ACT",
        "target": "imessage",
        "node_id": "mac-primary",
        "executor": "imessage-cli",
        "version": 1,
        "lifecycle": "active",
        "success": 0,
        "fail": 0
      },
      {
        "verb": "DEVICE.EXEC",
        "target": "mac",
        "node_id": "mac-primary",
        "executor": "local-exec",
        "version": 1,
        "lifecycle": "active",
        "success": 6,
        "fail": 0
      },
      {
        "verb": "APP.ACT",
        "target": "mac",
        "node_id": "mac-primary",
        "executor": "osascript-ax",
        "version": 1,
        "lifecycle": "active",
        "success": 1,
        "fail": 0
      },
      {
        "verb": "APP.ACT",
        "target": "iphone",
        "node_id": "iphone-primary",
        "executor": "pymobiledevice3-afc",
        "version": 1,
        "lifecycle": "active",
        "success": 3,
        "fail": 0
      }
    ],
    "invocations": [
      {
        "ts": "2026-09-08T00:35:10-07:00",
        "verb": "DEVICE.EXEC",
        "target": "mac",
        "node_id": "mac-primary",
        "executor": "local-exec",
        "result": "verified",
        "detail": "act exit=0; stdout 17B sha256:bdc9501c4745",
        "latency_ms": 110,
        "receipt": "/receipt/e1578ee3-597d-45e5-a1de-066c727e0d7a"
      },
      {
        "ts": "2026-09-08T00:01:37-07:00",
        "verb": "DEVICE.EXEC",
        "target": "mac",
        "node_id": "mac-primary",
        "executor": "local-exec",
        "result": "verified",
        "detail": "act exit=0",
        "latency_ms": 247,
        "receipt": "/receipt/11dd3156-e390-4e98-a341-8213ed0458b5"
      },
      {
        "ts": "2026-09-07T23:19:36-07:00",
        "verb": "APP.ACT",
        "target": "iphone",
        "node_id": "iphone-primary",
        "executor": "pymobiledevice3-afc",
        "result": "verified",
        "detail": "act exit=0",
        "latency_ms": 1238,
        "receipt": "/receipt/956a45d5-8568-4cb0-864b-573af6ee1541"
      },
      {
        "ts": "2026-09-07T23:18:32-07:00",
        "verb": "APP.ACT",
        "target": "iphone",
        "node_id": "iphone-primary",
        "executor": "pymobiledevice3-afc",
        "result": "verified",
        "detail": "act exit=0",
        "latency_ms": 1436,
        "receipt": "/receipt/fbad113c-31db-479e-80be-0b69deff2fff"
      },
      {
        "ts": "2026-09-07T23:14:34-07:00",
        "verb": "APP.ACT",
        "target": "iphone",
        "node_id": "iphone-primary",
        "executor": "pymobiledevice3-afc",
        "result": "verified",
        "detail": "act exit=0",
        "latency_ms": 1314,
        "receipt": "/receipt/47e33e7e-b893-4fff-a81f-a507828e11f0"
      },
      {
        "ts": "2026-09-07T23:05:07-07:00",
        "verb": "DEVICE.EXEC",
        "target": "mac",
        "node_id": "mac-primary",
        "executor": "local-exec",
        "result": "verified",
        "detail": "act exit=0",
        "latency_ms": 417,
        "receipt": "/receipt/daee6046-375c-4519-9230-cc5b84ea092a"
      },
      {
        "ts": "2026-09-07T22:36:26-07:00",
        "verb": "DEVICE.EXEC",
        "target": "mac",
        "node_id": "mac-primary",
        "executor": "local-exec",
        "result": "verified",
        "detail": "act exit=0",
        "latency_ms": 260,
        "receipt": "/receipt/fdc9c53a-d02a-4023-b9c9-a8979df7c84e"
      },
      {
        "ts": "2026-09-07T22:35:20-07:00",
        "verb": "APP.ACT",
        "target": "mac",
        "node_id": "mac-primary",
        "executor": "osascript-ax",
        "result": "verified",
        "detail": "\"Calculator\" absent before, present after → true/true",
        "latency_ms": 648,
        "receipt": "/receipt/657bd7ed-56ed-48c8-a88d-571aa3b18da6"
      },
      {
        "ts": "2026-09-07T22:35:18-07:00",
        "verb": "DEVICE.EXEC",
        "target": "mac",
        "node_id": "mac-primary",
        "executor": "local-exec",
        "result": "verified",
        "detail": "act exit=0",
        "latency_ms": 139,
        "receipt": "/receipt/2ec1b753-5786-4eeb-89d4-f6da70718564"
      },
      {
        "ts": "2026-09-07T22:34:24-07:00",
        "verb": "DEVICE.EXEC",
        "target": "mac",
        "node_id": "mac-primary",
        "executor": "local-exec",
        "result": "verified",
        "detail": "act exit=0",
        "latency_ms": 109,
        "receipt": "/receipt/0bc42b4e-9d14-4e55-8633-a20656aae4c5"
      }
    ]
  },
  "lifecycle": {
    "discovered": 0,
    "candidate": 51,
    "tested": 1,
    "verified": 34,
    "stable": 2,
    "degraded": 0,
    "unavailable": 0
  },
  "nodes": [
    {
      "node_id": "adspower",
      "node_kind": "adspower-profile",
      "observations": 12,
      "last_seen": "2026-09-08T00:31:37-07:00"
    },
    {
      "node_id": "chrome-default",
      "node_kind": "browser-profile",
      "observations": 4,
      "last_seen": "2026-09-08T00:31:36-07:00"
    },
    {
      "node_id": "chrome-profile-1",
      "node_kind": "browser-profile",
      "observations": 12,
      "last_seen": "2026-09-08T00:31:37-07:00"
    },
    {
      "node_id": "chrome-profile-2",
      "node_kind": "browser-profile",
      "observations": 12,
      "last_seen": "2026-09-08T00:31:37-07:00"
    },
    {
      "node_id": "iphone-primary",
      "node_kind": "iphone",
      "observations": 466,
      "last_seen": "2026-09-08T00:31:28-07:00"
    },
    {
      "node_id": "mac-primary",
      "node_kind": "physical-mac",
      "observations": 394,
      "last_seen": "2026-09-08T16:34:24-07:00"
    }
  ],
  "by_executor": [
    {
      "executor": "wda",
      "capabilities": 35,
      "verified": 0
    },
    {
      "executor": "local-exec",
      "capabilities": 14,
      "verified": 14
    },
    {
      "executor": "osascript-ax",
      "capabilities": 9,
      "verified": 3
    },
    {
      "executor": "imsg",
      "capabilities": 7,
      "verified": 6
    },
    {
      "executor": "imessage-cli",
      "capabilities": 7,
      "verified": 2
    },
    {
      "executor": "preferences-read",
      "capabilities": 3,
      "verified": 3
    },
    {
      "executor": "cdp",
      "capabilities": 3,
      "verified": 0
    },
    {
      "executor": "shortcuts",
      "capabilities": 2,
      "verified": 1
    },
    {
      "executor": "pymobiledevice3",
      "capabilities": 2,
      "verified": 2
    },
    {
      "executor": "imsg-rpc",
      "capabilities": 2,
      "verified": 2
    },
    {
      "executor": "shell",
      "capabilities": 1,
      "verified": 1
    },
    {
      "executor": "pymobiledevice3-afc",
      "capabilities": 1,
      "verified": 1
    },
    {
      "executor": "imsg-watch",
      "capabilities": 1,
      "verified": 1
    },
    {
      "executor": "adspower-api",
      "capabilities": 1,
      "verified": 0
    }
  ],
  "by_node": [
    {
      "node_id": "mac-primary",
      "capabilities": 43,
      "verified": 30
    },
    {
      "node_id": "iphone-primary",
      "capabilities": 38,
      "verified": 3
    },
    {
      "node_id": "chrome-default",
      "capabilities": 2,
      "verified": 1
    },
    {
      "node_id": "chrome-profile-1",
      "capabilities": 2,
      "verified": 1
    },
    {
      "node_id": "chrome-profile-2",
      "capabilities": 2,
      "verified": 1
    },
    {
      "node_id": "adspower",
      "capabilities": 1,
      "verified": 0
    }
  ],
  "by_target": [
    {
      "target": "imessage",
      "capabilities": 18,
      "verified": 12
    },
    {
      "target": "mac",
      "capabilities": 9,
      "verified": 8
    },
    {
      "target": "chrome",
      "capabilities": 8,
      "verified": 4
    },
    {
      "target": "instagram",
      "capabilities": 3,
      "verified": 0
    },
    {
      "target": "iphone",
      "capabilities": 3,
      "verified": 3
    },
    {
      "target": "spotify",
      "capabilities": 3,
      "verified": 0
    },
    {
      "target": "amazon",
      "capabilities": 2,
      "verified": 0
    },
    {
      "target": "calendar",
      "capabilities": 2,
      "verified": 1
    },
    {
      "target": "chatgpt",
      "capabilities": 2,
      "verified": 0
    },
    {
      "target": "gmail",
      "capabilities": 2,
      "verified": 0
    },
    {
      "target": "messenger",
      "capabilities": 2,
      "verified": 0
    },
    {
      "target": "reddit",
      "capabilities": 2,
      "verified": 0
    },
    {
      "target": "signal",
      "capabilities": 2,
      "verified": 0
    },
    {
      "target": "telegram",
      "capabilities": 2,
      "verified": 0
    },
    {
      "target": "uber",
      "capabilities": 2,
      "verified": 0
    },
    {
      "target": "whatsapp",
      "capabilities": 2,
      "verified": 0
    },
    {
      "target": "youtube",
      "capabilities": 2,
      "verified": 0
    },
    {
      "target": "adspower",
      "capabilities": 1,
      "verified": 0
    },
    {
      "target": "contacts",
      "capabilities": 1,
      "verified": 1
    },
    {
      "target": "discord",
      "capabilities": 1,
      "verified": 0
    },
    {
      "target": "doordash",
      "capabilities": 1,
      "verified": 0
    },
    {
      "target": "facebook",
      "capabilities": 1,
      "verified": 0
    },
    {
      "target": "homekit",
      "capabilities": 1,
      "verified": 0
    },
    {
      "target": "keynote",
      "capabilities": 1,
      "verified": 0
    },
    {
      "target": "linkedin",
      "capabilities": 1,
      "verified": 0
    },
    {
      "target": "mail",
      "capabilities": 1,
      "verified": 1
    },
    {
      "target": "microsoft-excel",
      "capabilities": 1,
      "verified": 0
    },
    {
      "target": "microsoft-outlook",
      "capabilities": 1,
      "verified": 0
    },
    {
      "target": "netflix",
      "capabilities": 1,
      "verified": 0
    },
    {
      "target": "notes",
      "capabilities": 1,
      "verified": 1
    },
    {
      "target": "photos",
      "capabilities": 1,
      "verified": 1
    },
    {
      "target": "reminders",
      "capabilities": 1,
      "verified": 1
    },
    {
      "target": "safari",
      "capabilities": 1,
      "verified": 1
    },
    {
      "target": "shortcuts",
      "capabilities": 1,
      "verified": 1
    },
    {
      "target": "slack",
      "capabilities": 1,
      "verified": 0
    },
    {
      "target": "spotlight",
      "capabilities": 1,
      "verified": 1
    },
    {
      "target": "tiktok",
      "capabilities": 1,
      "verified": 0
    },
    {
      "target": "venmo",
      "capabilities": 1,
      "verified": 0
    },
    {
      "target": "youtube-music",
      "capabilities": 1,
      "verified": 0
    }
  ],
  "capabilities": [
    {
      "semantic_capability": "account.read",
      "object_type": "account",
      "target": "chrome",
      "node_id": "chrome-default",
      "app_bundle": null,
      "account_hint": "authenticated:none",
      "executor": "preferences-read",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T00:31:36-07:00",
      "latency_ms": 4,
      "availability": "ready",
      "auth_state": "none",
      "evidence": "read profile authenticated account",
      "receipt": "/receipt/b3df6611-9c29-4680-8268-7357b1293be9"
    },
    {
      "semantic_capability": "account.read",
      "object_type": "account",
      "target": "chrome",
      "node_id": "chrome-profile-1",
      "app_bundle": null,
      "account_hint": "authenticated:google",
      "executor": "preferences-read",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T00:31:37-07:00",
      "latency_ms": 1,
      "availability": "ready",
      "auth_state": "authenticated",
      "evidence": "read profile authenticated account",
      "receipt": "/receipt/d49a473d-1fa3-4c58-9b36-a03f2d5b4265"
    },
    {
      "semantic_capability": "account.read",
      "object_type": "account",
      "target": "chrome",
      "node_id": "chrome-profile-2",
      "app_bundle": null,
      "account_hint": "authenticated:google",
      "executor": "preferences-read",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T00:31:37-07:00",
      "latency_ms": 1,
      "availability": "ready",
      "auth_state": "authenticated",
      "evidence": "read profile authenticated account",
      "receipt": "/receipt/ec372eee-0289-4653-aef0-2588bd888623"
    },
    {
      "semantic_capability": "app.inventory.read",
      "object_type": "app",
      "target": "mac",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "osascript-ax",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T00:31:24-07:00",
      "latency_ms": 192,
      "availability": "ready",
      "auth_state": "authenticated",
      "evidence": "osascript running-app enumeration through the bridge",
      "receipt": "/receipt/af487bd2-d30d-4558-9ef8-043e9e3f9fc6"
    },
    {
      "semantic_capability": "app.inventory.read",
      "object_type": "app",
      "target": "iphone",
      "node_id": "iphone-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "pymobiledevice3",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T00:31:28-07:00",
      "latency_ms": 1091,
      "availability": "ready",
      "auth_state": "authenticated",
      "evidence": "installation_proxy listed 263 user apps",
      "receipt": "/receipt/a44cab88-8cdf-40b1-a92e-c407d301d411"
    },
    {
      "semantic_capability": "bluetooth.read",
      "object_type": "device",
      "target": "mac",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "local-exec",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T12:34:52-07:00",
      "latency_ms": 389,
      "availability": "ready",
      "auth_state": "local",
      "evidence": "system_profiler SPBluetoothDataType -json through the bridge",
      "receipt": "/receipt/3ad8d42e-566f-4169-aa5f-6664511bdba6"
    },
    {
      "semantic_capability": "calendar.read",
      "object_type": "event",
      "target": "calendar",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "local-exec",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T12:34:52-07:00",
      "latency_ms": 25,
      "availability": "ready",
      "auth_state": "local",
      "evidence": "sqlite3 immutable read of group.com.apple.calendar/Calendar.sqlitedb through the bridge: 174 items",
      "receipt": "/receipt/c2759aaf-ed4c-481e-aee3-03054cab6eb8"
    },
    {
      "semantic_capability": "chrome.history.read",
      "object_type": "visit",
      "target": "chrome",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "local-exec",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T12:34:52-07:00",
      "latency_ms": 21,
      "availability": "ready",
      "auth_state": "local",
      "evidence": "sqlite3 immutable read of Chrome Default/History through the bridge",
      "receipt": "/receipt/ce8b587f-ff6f-4f89-9a65-e8ece1578655"
    },
    {
      "semantic_capability": "contacts.read",
      "object_type": "contact",
      "target": "contacts",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "local-exec",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T12:34:52-07:00",
      "latency_ms": 42,
      "availability": "ready",
      "auth_state": "local",
      "evidence": "sqlite3 immutable read of AddressBook-v22.abcddb through the bridge: 408 records",
      "receipt": "/receipt/fba18808-1f93-4a98-b71c-5b53a214d68f"
    },
    {
      "semantic_capability": "device.info.read",
      "object_type": "device",
      "target": "iphone",
      "node_id": "iphone-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "pymobiledevice3",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T00:31:28-07:00",
      "latency_ms": 649,
      "availability": "ready",
      "auth_state": "authenticated",
      "evidence": "lockdown info returned product/version",
      "receipt": "/receipt/35715e66-a5cf-4062-8cb2-64e4a7265026"
    },
    {
      "semantic_capability": "mail.read",
      "object_type": "email",
      "target": "mail",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "local-exec",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T12:34:52-07:00",
      "latency_ms": 27,
      "availability": "ready",
      "auth_state": "local",
      "evidence": "sqlite3 immutable read of Mail Envelope Index through the bridge: 262 messages",
      "receipt": "/receipt/1af41706-9852-4169-8dae-02582dd07be4"
    },
    {
      "semantic_capability": "message.account.read",
      "object_type": "account",
      "target": "imessage",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "imsg",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T12:34:52-07:00",
      "latency_ms": 41,
      "availability": "ready",
      "auth_state": "owner_apple_id",
      "evidence": "imsg account --local --json through the bridge (IMSG_ACCOUNT)",
      "receipt": "/receipt/6f41835d-dfdb-4430-ba72-2227783ed9bd"
    },
    {
      "semantic_capability": "message.after.read",
      "object_type": "message",
      "target": "imessage",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "imsg-rpc",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T12:34:52-07:00",
      "latency_ms": 400,
      "availability": "ready",
      "auth_state": "owner_apple_id",
      "evidence": "imsg rpc messages.after since_rowid cursor with next_rowid/has_more (IMSG_AFTER)",
      "receipt": "/receipt/e5ff3f8c-43a6-4a37-ad7d-722e58564e05"
    },
    {
      "semantic_capability": "message.chats.read",
      "object_type": "conversation",
      "target": "imessage",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "imsg",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T12:34:52-07:00",
      "latency_ms": 454,
      "availability": "ready",
      "auth_state": "owner_apple_id",
      "evidence": "imsg chats --limit 5 --json through the bridge: 1,965 bytes, exit 0 (directory row IMSG_CHATS)",
      "receipt": "/receipt/1e45595a-a1eb-4046-97f8-b8201e12a3d5"
    },
    {
      "semantic_capability": "message.history.read",
      "object_type": "message",
      "target": "imessage",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "imsg",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T12:34:52-07:00",
      "latency_ms": 167,
      "availability": "ready",
      "auth_state": "owner_apple_id",
      "evidence": "imsg history --chat-id --limit 5 --attachments --json through the bridge; decoded bodies (IMSG_HISTORY)",
      "receipt": "/receipt/bfee7bd5-f1a8-4979-a556-3a3fd8ba4181"
    },
    {
      "semantic_capability": "message.identity.read",
      "object_type": "account",
      "target": "imessage",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "imessage-cli",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T12:34:52-07:00",
      "latency_ms": 56,
      "availability": "ready",
      "auth_state": "owner_apple_id",
      "evidence": "imessage-cli --json current-user through the bridge (IMSG_CURRENT_USER)",
      "receipt": "/receipt/24f4c375-24a6-42ac-9bed-aedf4808fa46"
    },
    {
      "semantic_capability": "message.react",
      "object_type": "message",
      "target": "imessage",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "imessage-cli",
      "direction": "write",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T12:34:52-07:00",
      "latency_ms": 2870,
      "availability": "ready",
      "auth_state": "owner_apple_id",
      "evidence": "imessage-cli react <self-chat> latest like through the bridge: ok react 2803 ms, Accessibility path, no consent dialog (IMSG_REACT)",
      "receipt": "/receipt/b5310875-70b9-4a33-90ad-8993d54c6f78"
    },
    {
      "semantic_capability": "message.search.read",
      "object_type": "message",
      "target": "imessage",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "imsg",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T12:34:52-07:00",
      "latency_ms": 140,
      "availability": "ready",
      "auth_state": "owner_apple_id",
      "evidence": "imsg search --query --limit --json through the bridge via dispatch IMSG_SEARCH; quote-safe args",
      "receipt": "/receipt/027e7975-ee52-4afe-ab63-501d1936cc58"
    },
    {
      "semantic_capability": "message.send_status.read",
      "object_type": "message",
      "target": "imessage",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "imsg-rpc",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T12:34:52-07:00",
      "latency_ms": 300,
      "availability": "ready",
      "auth_state": "owner_apple_id",
      "evidence": "imsg rpc message.send_status on guid 63BBA90F…: send_state delivered, delivered_at 2026-09-08T19:17:39Z (IMSG_SEND_STATUS)",
      "receipt": "/receipt/3a10d31b-eff7-4795-946c-e1ef53f919f2"
    },
    {
      "semantic_capability": "message.stats.read",
      "object_type": "message",
      "target": "imessage",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "imsg",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T12:34:52-07:00",
      "latency_ms": 7180,
      "availability": "ready",
      "auth_state": "owner_apple_id",
      "evidence": "imsg stats --json through the bridge: 666,877 messages counted (IMSG_STATS)",
      "receipt": "/receipt/3ccbf257-7fdb-4618-bee7-60189f605bb8"
    },
    {
      "semantic_capability": "message.unread.read",
      "object_type": "conversation",
      "target": "imessage",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "imsg",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T12:34:52-07:00",
      "latency_ms": 1104,
      "availability": "ready",
      "auth_state": "owner_apple_id",
      "evidence": "imsg chats --unread-only --json through the bridge (IMSG_UNREAD)",
      "receipt": "/receipt/4fe2885b-037b-496c-a764-10eb9297f2d9"
    },
    {
      "semantic_capability": "message.watch.read",
      "object_type": "message",
      "target": "imessage",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "imsg-watch",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T12:34:52-07:00",
      "latency_ms": 250,
      "availability": "ready",
      "auth_state": "owner_apple_id",
      "evidence": "imsg watch --json NDJSON stream, FSEvents on chat.db; running as LaunchAgent; log at ~/.imsg/inbox.ndjson (IMSG_INBOX)",
      "receipt": "/receipt/e061cb41-b9be-4bbc-9495-13547faf47ec"
    },
    {
      "semantic_capability": "messages.history.read",
      "object_type": "message",
      "target": "imessage",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "local-exec",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T00:31:24-07:00",
      "latency_ms": 20,
      "availability": "ready",
      "auth_state": "authenticated",
      "evidence": "chat.db row count through the bridge (count withheld)",
      "receipt": "/receipt/0f7d02f0-99b1-4514-8d84-fc97930a2d95"
    },
    {
      "semantic_capability": "notes.read",
      "object_type": "note",
      "target": "notes",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "local-exec",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T12:34:52-07:00",
      "latency_ms": 74,
      "availability": "ready",
      "auth_state": "local",
      "evidence": "sqlite3 immutable read of NoteStore.sqlite through the bridge: 1,012 titled notes",
      "receipt": "/receipt/759c4875-323d-4aeb-8f70-5f40f1fc75dd"
    },
    {
      "semantic_capability": "photos.read",
      "object_type": "photo",
      "target": "photos",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "local-exec",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T12:34:52-07:00",
      "latency_ms": 48,
      "availability": "ready",
      "auth_state": "local",
      "evidence": "sqlite3 immutable read of Photos.sqlite through the bridge: 47,213 assets",
      "receipt": "/receipt/7143f5c4-4fab-48bc-99be-e05a6327eb34"
    },
    {
      "semantic_capability": "power.read",
      "object_type": "device",
      "target": "mac",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "local-exec",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T12:34:52-07:00",
      "latency_ms": 35,
      "availability": "ready",
      "auth_state": "local",
      "evidence": "pmset -g batt through the bridge",
      "receipt": "/receipt/531736f2-491b-40ef-88f6-713c0d2ac10e"
    },
    {
      "semantic_capability": "process.read",
      "object_type": "process",
      "target": "mac",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "shell",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T00:31:24-07:00",
      "latency_ms": 47,
      "availability": "ready",
      "auth_state": "authenticated",
      "evidence": "ps -Ao comm through the bridge",
      "receipt": "/receipt/8ec84695-87ea-43a6-935a-dc1a17b89c8a"
    },
    {
      "semantic_capability": "processes.read",
      "object_type": "process",
      "target": "mac",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "osascript-ax",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T12:34:52-07:00",
      "latency_ms": 516,
      "availability": "ready",
      "auth_state": "local",
      "evidence": "osascript -l JavaScript System Events processes.name() through the bridge",
      "receipt": "/receipt/0c006381-d25f-48d1-9c59-86640bc1378b"
    },
    {
      "semantic_capability": "reminders.read",
      "object_type": "reminder",
      "target": "reminders",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "local-exec",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T12:34:52-07:00",
      "latency_ms": 27,
      "availability": "ready",
      "auth_state": "local",
      "evidence": "sqlite3 immutable read of group.com.apple.reminders stores through the bridge (0 local reminders)",
      "receipt": "/receipt/d310cf60-d7c6-4cd1-abd3-365f035300ad"
    },
    {
      "semantic_capability": "safari.history.read",
      "object_type": "visit",
      "target": "safari",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "local-exec",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T12:34:52-07:00",
      "latency_ms": 26,
      "availability": "ready",
      "auth_state": "local",
      "evidence": "sqlite3 immutable read of Safari History.db through the bridge: 255 items",
      "receipt": "/receipt/ac6901c1-87b6-42f6-9ebf-abd12bd5aed1"
    },
    {
      "semantic_capability": "screen.capture.read",
      "object_type": "app",
      "target": "mac",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "local-exec",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T00:31:24-07:00",
      "latency_ms": 118,
      "availability": "ready",
      "auth_state": "authenticated",
      "evidence": "screencapture through the bridge returned 1941294 bytes",
      "receipt": "/receipt/91ee3c86-ef32-4cdd-abbd-c0a0cd770fcc"
    },
    {
      "semantic_capability": "shortcuts.inventory.read",
      "object_type": "shortcut",
      "target": "shortcuts",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "shortcuts",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T12:34:52-07:00",
      "latency_ms": 104,
      "availability": "ready",
      "auth_state": "local",
      "evidence": "shortcuts list through the bridge: 44 shortcuts",
      "receipt": "/receipt/dce65ce2-33d0-45ba-9986-475e62e2da7e"
    },
    {
      "semantic_capability": "spotlight.search.read",
      "object_type": "file",
      "target": "spotlight",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "local-exec",
      "direction": "read",
      "confidence": 1,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T12:34:52-07:00",
      "latency_ms": 102,
      "availability": "ready",
      "auth_state": "local",
      "evidence": "mdfind -count through the bridge: 161 PDFs indexed",
      "receipt": "/receipt/f7c072cd-5aeb-4e53-8c4d-d4a9cd2e1bc8"
    },
    {
      "semantic_capability": "device.exec",
      "object_type": "process",
      "target": "mac",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "local-exec",
      "direction": "write",
      "confidence": 0.9,
      "lifecycle": "stable",
      "verified": true,
      "last_verified": "2026-09-08T00:35:10-07:00",
      "latency_ms": 110,
      "availability": "ready",
      "auth_state": "authenticated",
      "evidence": "LOCAL_EXEC bridge shell",
      "receipt": "/receipt/e1578ee3-597d-45e5-a1de-066c727e0d7a"
    },
    {
      "semantic_capability": "ui.snapshot.read",
      "object_type": "app",
      "target": "mac",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "osascript-ax",
      "direction": "read",
      "confidence": 0.9,
      "lifecycle": "verified",
      "verified": true,
      "last_verified": "2026-09-08T00:31:24-07:00",
      "latency_ms": 90,
      "availability": "ready",
      "auth_state": "authenticated",
      "evidence": "System Events front-window UI elements through the bridge",
      "receipt": "/receipt/5d0f4dd1-cd97-4fbe-b336-fd711d010afa"
    },
    {
      "semantic_capability": "phone.file.write",
      "object_type": "file",
      "target": "iphone",
      "node_id": "iphone-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "pymobiledevice3-afc",
      "direction": "write",
      "confidence": 0.8,
      "lifecycle": "stable",
      "verified": true,
      "last_verified": "2026-09-07T23:19:36-07:00",
      "latency_ms": 1238,
      "availability": "ready",
      "auth_state": "authenticated",
      "evidence": "afc push/pull/rm verified without Developer Mode",
      "receipt": "/receipt/956a45d5-8568-4cb0-864b-573af6ee1541"
    },
    {
      "semantic_capability": "app.script.chrome",
      "object_type": "tab",
      "target": "chrome",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "osascript-ax",
      "direction": "write",
      "confidence": 0.9,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "ready",
      "auth_state": "local",
      "evidence": "Chrome sdef present AND Apple Events consent for Chrome already granted to the bridge node",
      "receipt": null
    },
    {
      "semantic_capability": "calendar.write",
      "object_type": "event",
      "target": "calendar",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "osascript-ax",
      "direction": "write",
      "confidence": 0.9,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "ready",
      "auth_state": "local",
      "evidence": "Apple Events consent for Calendar already granted to the bridge node (TCC row present)",
      "receipt": null
    },
    {
      "semantic_capability": "message.send",
      "object_type": "message",
      "target": "imessage",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "imsg",
      "direction": "write",
      "confidence": 0.9,
      "lifecycle": "tested",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "owner_apple_id",
      "evidence": "imsg send verified from a consented process: guid 63BBA90F… delivered 19:17:39Z. From the bridge process the Apple Events→Messages consent is not yet granted (TCC row absent), so the first bridge send raises the one-time dialog (IMSG_SEND)",
      "receipt": null
    },
    {
      "semantic_capability": "message.edit",
      "object_type": "message",
      "target": "imessage",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "imessage-cli",
      "direction": "write",
      "confidence": 0.8,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "ready",
      "auth_state": "owner_apple_id",
      "evidence": "Accessibility path; not yet invoked (IMSG_EDIT)",
      "receipt": null
    },
    {
      "semantic_capability": "message.mark_read",
      "object_type": "conversation",
      "target": "imessage",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "imessage-cli",
      "direction": "write",
      "confidence": 0.8,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "ready",
      "auth_state": "owner_apple_id",
      "evidence": "Accessibility path; not yet invoked (IMSG_MARK_READ)",
      "receipt": null
    },
    {
      "semantic_capability": "message.reply",
      "object_type": "message",
      "target": "imessage",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "imessage-cli",
      "direction": "write",
      "confidence": 0.8,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "ready",
      "auth_state": "owner_apple_id",
      "evidence": "same Accessibility path as message.react; not yet invoked (IMSG_REPLY)",
      "receipt": null
    },
    {
      "semantic_capability": "message.typing",
      "object_type": "conversation",
      "target": "imessage",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "imessage-cli",
      "direction": "write",
      "confidence": 0.8,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "ready",
      "auth_state": "owner_apple_id",
      "evidence": "Accessibility path; not yet invoked (IMSG_TYPING)",
      "receipt": null
    },
    {
      "semantic_capability": "message.unsend",
      "object_type": "message",
      "target": "imessage",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "imessage-cli",
      "direction": "write",
      "confidence": 0.8,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "ready",
      "auth_state": "owner_apple_id",
      "evidence": "Accessibility path; not yet invoked (IMSG_UNSEND)",
      "receipt": null
    },
    {
      "semantic_capability": "app.open",
      "object_type": "app",
      "target": "mac",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "osascript-ax",
      "direction": "write",
      "confidence": 0.7,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "ready",
      "auth_state": "authenticated",
      "evidence": "open -a <App>; verifiable by running-app enumeration",
      "receipt": null
    },
    {
      "semantic_capability": "app.script.excel",
      "object_type": "document",
      "target": "microsoft-excel",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "osascript-ax",
      "direction": "write",
      "confidence": 0.7,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "licensed",
      "evidence": "Excel.sdef present; Apple Events consent for Excel not yet granted to the bridge",
      "receipt": null
    },
    {
      "semantic_capability": "app.script.keynote",
      "object_type": "document",
      "target": "keynote",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "osascript-ax",
      "direction": "write",
      "confidence": 0.7,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "local",
      "evidence": "Keynote.sdef present (export to PDF/PowerPoint/images); consent not yet granted to the bridge",
      "receipt": null
    },
    {
      "semantic_capability": "app.script.outlook",
      "object_type": "email",
      "target": "microsoft-outlook",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "osascript-ax",
      "direction": "write",
      "confidence": 0.7,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "licensed",
      "evidence": "Outlook sdef present; consent not yet granted",
      "receipt": null
    },
    {
      "semantic_capability": "home.shortcut.run",
      "object_type": "accessory",
      "target": "homekit",
      "node_id": "mac-primary",
      "app_bundle": null,
      "account_hint": null,
      "executor": "shortcuts",
      "direction": "write",
      "confidence": 0.7,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "ready",
      "auth_state": "local",
      "evidence": "shortcuts named Door Lock, Gate code, Home exist and `shortcuts run` is verified for other shortcuts; deliberately not invoked (physical actuation)",
      "receipt": null
    },
    {
      "semantic_capability": "browser.navigate",
      "object_type": "session",
      "target": "chrome",
      "node_id": "chrome-default",
      "app_bundle": null,
      "account_hint": null,
      "executor": "cdp",
      "direction": "write",
      "confidence": 0.5,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "authenticated",
      "evidence": "authenticated profile; CDP endpoint not currently exposed",
      "receipt": null
    },
    {
      "semantic_capability": "browser.navigate",
      "object_type": "session",
      "target": "chrome",
      "node_id": "chrome-profile-1",
      "app_bundle": null,
      "account_hint": null,
      "executor": "cdp",
      "direction": "write",
      "confidence": 0.5,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "authenticated",
      "evidence": "authenticated profile; CDP endpoint not currently exposed",
      "receipt": null
    },
    {
      "semantic_capability": "browser.navigate",
      "object_type": "session",
      "target": "chrome",
      "node_id": "chrome-profile-2",
      "app_bundle": null,
      "account_hint": null,
      "executor": "cdp",
      "direction": "write",
      "confidence": 0.5,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "authenticated",
      "evidence": "authenticated profile; CDP endpoint not currently exposed",
      "receipt": null
    },
    {
      "semantic_capability": "conversation.create",
      "object_type": "message",
      "target": "chatgpt",
      "node_id": "iphone-primary",
      "app_bundle": "com.openai.chat",
      "account_hint": null,
      "executor": "wda",
      "direction": "write",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "ChatGPT installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "conversation.read",
      "object_type": "message",
      "target": "chatgpt",
      "node_id": "iphone-primary",
      "app_bundle": "com.openai.chat",
      "account_hint": null,
      "executor": "wda",
      "direction": "read",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "ChatGPT installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "email.read",
      "object_type": "message",
      "target": "gmail",
      "node_id": "iphone-primary",
      "app_bundle": "com.google.Gmail",
      "account_hint": null,
      "executor": "wda",
      "direction": "read",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "Gmail installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "email.send",
      "object_type": "message",
      "target": "gmail",
      "node_id": "iphone-primary",
      "app_bundle": "com.google.Gmail",
      "account_hint": null,
      "executor": "wda",
      "direction": "write",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "Gmail installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "feed.read",
      "object_type": "post",
      "target": "reddit",
      "node_id": "iphone-primary",
      "app_bundle": "com.reddit.Reddit",
      "account_hint": null,
      "executor": "wda",
      "direction": "read",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "Reddit installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "media.control",
      "object_type": "media",
      "target": "spotify",
      "node_id": "iphone-primary",
      "app_bundle": "com.spotify.client",
      "account_hint": null,
      "executor": "wda",
      "direction": "write",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "Spotify installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "media.play",
      "object_type": "media",
      "target": "spotify",
      "node_id": "iphone-primary",
      "app_bundle": "com.spotify.client",
      "account_hint": null,
      "executor": "wda",
      "direction": "write",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "Spotify installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "media.play",
      "object_type": "media",
      "target": "youtube",
      "node_id": "iphone-primary",
      "app_bundle": "com.google.ios.youtube",
      "account_hint": null,
      "executor": "wda",
      "direction": "write",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "YouTube installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "media.play",
      "object_type": "media",
      "target": "youtube-music",
      "node_id": "iphone-primary",
      "app_bundle": "com.google.ios.youtubemusic",
      "account_hint": null,
      "executor": "wda",
      "direction": "write",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "YouTube Music installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "media.play",
      "object_type": "media",
      "target": "netflix",
      "node_id": "iphone-primary",
      "app_bundle": "com.netflix.Netflix",
      "account_hint": null,
      "executor": "wda",
      "direction": "write",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "Netflix installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "media.search",
      "object_type": "media",
      "target": "spotify",
      "node_id": "iphone-primary",
      "app_bundle": "com.spotify.client",
      "account_hint": null,
      "executor": "wda",
      "direction": "read",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "Spotify installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "media.search",
      "object_type": "media",
      "target": "youtube",
      "node_id": "iphone-primary",
      "app_bundle": "com.google.ios.youtube",
      "account_hint": null,
      "executor": "wda",
      "direction": "read",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "YouTube installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "message.read",
      "object_type": "message",
      "target": "instagram",
      "node_id": "iphone-primary",
      "app_bundle": "com.burbn.instagram",
      "account_hint": null,
      "executor": "wda",
      "direction": "read",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "Instagram installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "message.read",
      "object_type": "message",
      "target": "whatsapp",
      "node_id": "iphone-primary",
      "app_bundle": "net.whatsapp.WhatsApp",
      "account_hint": null,
      "executor": "wda",
      "direction": "read",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "‎WhatsApp installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "message.read",
      "object_type": "message",
      "target": "telegram",
      "node_id": "iphone-primary",
      "app_bundle": "ph.telegra.Telegraph",
      "account_hint": null,
      "executor": "wda",
      "direction": "read",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "Telegram installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "message.read",
      "object_type": "message",
      "target": "messenger",
      "node_id": "iphone-primary",
      "app_bundle": "com.facebook.Messenger",
      "account_hint": null,
      "executor": "wda",
      "direction": "read",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "Messenger installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "message.read",
      "object_type": "message",
      "target": "signal",
      "node_id": "iphone-primary",
      "app_bundle": "org.whispersystems.signal",
      "account_hint": null,
      "executor": "wda",
      "direction": "read",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "Signal installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "message.send",
      "object_type": "message",
      "target": "instagram",
      "node_id": "iphone-primary",
      "app_bundle": "com.burbn.instagram",
      "account_hint": null,
      "executor": "wda",
      "direction": "write",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "Instagram installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "message.send",
      "object_type": "message",
      "target": "whatsapp",
      "node_id": "iphone-primary",
      "app_bundle": "net.whatsapp.WhatsApp",
      "account_hint": null,
      "executor": "wda",
      "direction": "write",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "‎WhatsApp installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "message.send",
      "object_type": "message",
      "target": "telegram",
      "node_id": "iphone-primary",
      "app_bundle": "ph.telegra.Telegraph",
      "account_hint": null,
      "executor": "wda",
      "direction": "write",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "Telegram installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "message.send",
      "object_type": "message",
      "target": "messenger",
      "node_id": "iphone-primary",
      "app_bundle": "com.facebook.Messenger",
      "account_hint": null,
      "executor": "wda",
      "direction": "write",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "Messenger installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "message.send",
      "object_type": "message",
      "target": "signal",
      "node_id": "iphone-primary",
      "app_bundle": "org.whispersystems.signal",
      "account_hint": null,
      "executor": "wda",
      "direction": "write",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "Signal installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "message.send",
      "object_type": "message",
      "target": "discord",
      "node_id": "iphone-primary",
      "app_bundle": "com.hammerandchisel.discord",
      "account_hint": null,
      "executor": "wda",
      "direction": "write",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "Discord installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "message.send",
      "object_type": "message",
      "target": "slack",
      "node_id": "iphone-primary",
      "app_bundle": "com.tinyspeck.chatlyio",
      "account_hint": null,
      "executor": "wda",
      "direction": "write",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "Slack installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "message.send",
      "object_type": "message",
      "target": "linkedin",
      "node_id": "iphone-primary",
      "app_bundle": "com.linkedin.LinkedIn",
      "account_hint": null,
      "executor": "wda",
      "direction": "write",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "LinkedIn installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "order.history.read",
      "object_type": "order",
      "target": "doordash",
      "node_id": "iphone-primary",
      "app_bundle": "doordash.DoorDashConsumer",
      "account_hint": null,
      "executor": "wda",
      "direction": "read",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "DoorDash installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "order.history.read",
      "object_type": "order",
      "target": "amazon",
      "node_id": "iphone-primary",
      "app_bundle": "com.amazon.Amazon",
      "account_hint": null,
      "executor": "wda",
      "direction": "read",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "Amazon installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "payment.history.read",
      "object_type": "payment",
      "target": "venmo",
      "node_id": "iphone-primary",
      "app_bundle": "net.kortina.labs.Venmo",
      "account_hint": null,
      "executor": "wda",
      "direction": "read",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "Venmo installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "post.create",
      "object_type": "post",
      "target": "instagram",
      "node_id": "iphone-primary",
      "app_bundle": "com.burbn.instagram",
      "account_hint": null,
      "executor": "wda",
      "direction": "write",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "Instagram installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "post.create",
      "object_type": "post",
      "target": "reddit",
      "node_id": "iphone-primary",
      "app_bundle": "com.reddit.Reddit",
      "account_hint": null,
      "executor": "wda",
      "direction": "write",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "Reddit installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "post.create",
      "object_type": "post",
      "target": "tiktok",
      "node_id": "iphone-primary",
      "app_bundle": "com.zhiliaoapp.musically",
      "account_hint": null,
      "executor": "wda",
      "direction": "write",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "TikTok installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "post.create",
      "object_type": "post",
      "target": "facebook",
      "node_id": "iphone-primary",
      "app_bundle": "com.facebook.Facebook",
      "account_hint": null,
      "executor": "wda",
      "direction": "write",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "Facebook installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "product.search",
      "object_type": "order",
      "target": "amazon",
      "node_id": "iphone-primary",
      "app_bundle": "com.amazon.Amazon",
      "account_hint": null,
      "executor": "wda",
      "direction": "read",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "Amazon installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "ride.request",
      "object_type": "trip",
      "target": "uber",
      "node_id": "iphone-primary",
      "app_bundle": "com.ubercab.UberClient",
      "account_hint": null,
      "executor": "wda",
      "direction": "write",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "Uber installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "trip.history.read",
      "object_type": "trip",
      "target": "uber",
      "node_id": "iphone-primary",
      "app_bundle": "com.ubercab.UberClient",
      "account_hint": null,
      "executor": "wda",
      "direction": "read",
      "confidence": 0.4,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "Uber installed; capability behind device automation, unverified",
      "receipt": null
    },
    {
      "semantic_capability": "browser.identity",
      "object_type": "session",
      "target": "adspower",
      "node_id": "adspower",
      "app_bundle": null,
      "account_hint": null,
      "executor": "adspower-api",
      "direction": "write",
      "confidence": 0.35,
      "lifecycle": "candidate",
      "verified": false,
      "last_verified": null,
      "latency_ms": null,
      "availability": "needs_permission",
      "auth_state": "unknown",
      "evidence": "isolated persistent browser profile; local API returned 9110 (no local API permission)",
      "receipt": null
    }
  ]
}