// developers

Pick your stack. Register actions. Ship.

Every SDK speaks the same typed wire protocol with an on-device validator, the one already exercised end-to-end in production. Your app decides what an agent can see and do; the SDK enforces it.

Full integration guide →

1 · Add the package

Download the package and add it in Xcode (File → Add Package Dependencies → Add Local…), or vendor the folder into your repo. Requires iOS 16+ and pulls livekit/client-sdk-swift ≥ 2.0.

Download ScreenSteerKit (.zip)

2 · Register & redact

Mark what an agent may invoke and what must never leave the device. Everything else simply doesn't exist on the wire.

3 · Start with consent

session.start() is called only from your approved consent sheet. The banner, control sheet, and Stop are included as drop-in SwiftUI views.

Beta. The protocol core has a bundled contract suite, including golden-vector checks against the production wire bytes. The capture/UI layer still needs validation on your target device and LiveKit version; run CommandValidatorTests first.

ContentView.swift
import ScreenSteerKit

let session = ScreenSteerSession(
  config: ScreenSteerConfig(
    baseURL: URL(string: "https://screensteer.com")!,
    publishableKey: "pk_dev_…"))

Button("Refresh work orders") { store.refresh() }
  // the ONLY thing an agent can run:
  .screenSteerAction("workorders.refresh", session: session) {
    store.refresh()
  }

AccountDetailsView()
  // masked BEFORE publication:
  .screenSteerRedacted("account-details", session: session)

// from YOUR consent sheet:
await session.start(externalUserId: user.id)
ALSO SUPPORTED

Unity, MAUI, Xamarin, and Godot (C#) consume the same build-verified .NET client, which ships a netstandard2.1 build alongside net9. Electron, Ionic, and Capacitor apps run the Web SDK directly in their Chromium/WebView renderer. Need another stack? The wire protocol is small and typed; tell us and we'll port it.

Try it before you integrate

The browser device simulator implements this exact protocol, run the two-window demo against your own console, then wire the SDK knowing the control plane already works. Follow the simulator verification guide or deep-dive the security model in Why we will never inject touches.