Switchboard trust information

Code and document review date: 2026-11-03. Business features in this branch are not a production-service certification. Ask [to be confirmed: contact email] for the current release and deployment status.

Switchboard runs Mac automation locally. I make it as a one-person business, Kyle Carson doing business as Switchboard. I have no SOC 2 or ISO 27001 certificate, independent penetration-test report, cyber-insurance certificate, dedicated security team or uptime SLA.

What leaves the Mac

PathWhen and recipientDataControl or limit
Account and licenceTrial, email/company sign-in and daily online licence refresh; Switchboard account serverEmail when supplied, device name, salted hardware hash, version, licence and device credentialsAn offline team LicenceFile avoids account sign-in and refresh. A first anonymous trial still contacts the server.
Payment and invoicesCheckout or an invoice request; Paddle, and Switchboard for invoice creationEmail, company, billing address, seat count and optional PO number; payment details go to PaddlePurchasing is explicit. Paddle's applicable checkout and privacy terms govern payment processing.
Company identityCompany sign-in; configured OIDC issuer and Switchboard serverEmail/domain, authorization code, verified identity claimsOwner emailed-code access always remains. IdP tokens stay on the server and are not persisted.
Switchboard AI relayA relay model request; Switchboard then AnthropicPrompt, selected context and attachments; usage counts and costAIAllowed=false or RelayAllowed=false; AI is optional and Team has no included allowance.
Your own model keyA BYOK request; your selected providerAPI key, prompt and selected attachmentsAIAllowed=false; provider privacy terms apply.
iCloud library syncSync enabled; Apple private CloudKit databaseLibrary recordsiCloudSyncAllowed=false; the app setting defaults on when iCloud is available.
Phone and WatchPaired approvals and remote actions; Apple services and configured approval transportPairing/action/approval dataDo not pair or enable remote services. MCPAllowed does not disable phone approvals.
HTTP macros and scriptsWhen a macro requests network access; the URL or program you choseWhatever the macro sendsReview permissions and macros. ShellStepsAllowed=false blocks shell, AppleScript and CLI steps; it does not block ordinary HTTP steps.
ExtensionsInstalled extensions and their permitted network operationsData allowed by extension permissionsExtensionAllowlist restricts installation. Review existing extensions before deployment; do not assume installation filtering is a network firewall.
Shared/exported macrosExplicit share or file export; chosen recipientMacro content, which can include literalsReview before sharing. SharingAllowed disables the share menu; full export enforcement remains a release gate.
UpdatesPublic updater check; Switchboard release hostUpdate request metadataUpdateChannel=none disables Sparkle. stable and beta select their respective feeds.
FeedbackYou choose to send feedback; Switchboard supportText and diagnostic context selected by the feedback flowReview the submission. App feedback is distinct from website visit measurement.

There is no automatic upload of the local macro library or trace database to the account server. Recipients also receive ordinary connection metadata, including IP addresses. Web requests and user-written macros can still send private data. Disable AI if your policy prohibits sending prompts off the Mac.

Account storage and retention

The SQLite account database stores accounts, hashed device/web/SCIM credentials, licences, team membership, device seats, invoice references and team events. OIDC client secrets are encrypted using a key derived from the installation's authentication pepper. Sign-in states expire after 10 minutes; app SSO grants are single-use and expire after 60 seconds. App grants require a private verifier held by the Mac that started sign-in.

Local successful traces default to 30 days, failed traces to at least 90 days, with count and size limits. Traces may contain text typed by a macro, model inputs/outputs and other sensitive values. Server rate-limit events can contain an IP address or email in their key; events older than 24 hours are removed opportunistically during new requests, not on a guaranteed deletion deadline. The server does not currently automatically purge team-event/account history. A deletion request requires operator handling; do not infer deletion from deactivating a person in SCIM.

Production hosting region, disk encryption, nightly backups and a tested restore are not verified by this document. These are launch gates, not controls I claim are running.

Controls and their limits

Signed licences use Ed25519 and are verified locally. Device, browser and SCIM bearer secrets are stored as hashes on the server. The public service must be behind HTTPS; a local development server is not a safe public deployment. OIDC uses state, nonce, PKCE and signature/issuer/audience/time checks. SCIM cannot remove the owner.

App and engine run as separate processes. That separation is useful for reliability; it is not proof that all automation is sandboxed. A customer intentionally grants Accessibility and other macOS permissions so macros can operate other apps.

Release scripts sign and notarize release artifacts when the operator supplies the required certificates. The build and test gates are controls in the repository, not a substitute for an independent penetration test.

Audit exports

Activity has "Export audit log..." and the CLI has switchboard trace export --since 2026-11-01T00:00:00Z --format jsonl. They export retained runs in chronological order, including steps, outcomes, agent metadata and any approval notes recorded in the trace. Retained broker decisions are separate approval records; the broker keeps up to 200 and does not reliably associate each decision with a run. New run records capture the cached account email and Mac name at first write; older records have unknown identity. Offline licence-file runs do not identify an individual.

An owner/admin can download server events from Account > Team or GET /v1/team/events. Operator CLI: python3 server/serve.py team events owner@example.com --since 2026-11-01.

Abbreviated local sample: {"version":1,"type":"run","identity":{"email":"person@example.com","mac":"Work Mac"},"run":{"id":"run-1","macroId":"macro-1","status":"succeeded"}}.

Abbreviated server sample: {"ts":1793491200,"actor":"owner@example.com","kind":"member.added","subject":"person@example.com"}.

These logs are local/server records, not tamper-proof evidence. Review exports before sending them to a third party. Local exports include trace inputs and outputs.

Continuity

A Standard or Founder licence does not need a running account server to verify a previously issued valid licence. Standard still respects its update cutoff. Subscriptions and offline team files expire at their signed end dates, even if the company stops operating. I do not promise that team subscriptions will run forever without renewal.

See the forty-question questionnaire, disclosure policy, terms and DPA draft.