Lorca is a Grok bot alternative: a Rust CLI for macOS, Linux, and Windows, a native macOS AppKit client, a Windows and Linux app, and phone apps. The CLI is a localhost websocket service and the agent loop; the AppKit client is a UI for that CLI and launches the bundled binary.

You create bots, talk to them 1:1, or put them in a group chat. Bots can hand work to each other and orchestrate, in the same spirit as Grok Bot.

The UI is AppKit (SPM), built to feel like a Mac app: materials, density, keyboard, and motion.

Identity is a local key pair. Devices pair to each other. Traffic to the network is end-to-end encrypted. Each machine or phone that pairs is a Device and records its OS (macos, linux, windows, ios, ipados, android). Desktop Devices are Runners: you can create a bot for any paired Runner, and that bot uses the account's encrypted provider credentials there. Phones and tablets are Devices, not Runners.

Stack

  • macOS app: AppKit, SPM (macos/)
  • Windows and Linux app: MyGo (Go and the system webview) with a Solid page (desktop/), after the macOS app
  • CLI: Rust websocket service (crates/cli)
    • agent loop after pi-agent-core (crates/agent), with Grok-style bot orchestration
    • identity, pairing, E2E (X25519/Ed25519 key pairs + XChaCha20-Poly1305 DEK); signed requests and opaque blobs to the relay
  • relay: Rust, axum, SQLite or Postgres (crates/relay)
  • phone app: Expo (React Native, expo-router) for iOS and Android (mobile/); pairs as a Device and speaks the relay protocol itself

Run it

bun run dev          # builds the CLI and the app, launches the app, rebuilds on change; runs a relay on 0.0.0.0:8787
bun run desktop      # the Windows and Linux app in development (mygo dev); bun run desktop:build builds its releases
bun run mobile       # Expo dev server for the phone app (bun run mobile:ios builds the dev client)
bun run relay        # a local relay on 0.0.0.0:8787 (set LORCA_RELAY_URL to use it)
cargo test           # agent loop, crypto, and SSE tests
bun run reset        # stop everything and wipe identity, credentials, chats, prefs (-y, --build, --relay)

AI services

  • API key: DeepSeek, Anthropic, OpenCode Zen, OpenCode Go (with its Go subscription)
  • Subscription: ChatGPT, Grok (SuperGrok or X Premium+)

Architecture: ARCHITECTURE.md, the overview, and one doc per subject in docs/architecture. Read the overview and the subjects you touch before implementing.

Phone app

mobile/ is an Expo app for iOS and Android. It pairs with an existing Device by scanning a QR code from the desktop app or pasting a string from lorca pair, then talks to the relay directly with the Rust Device core: the same keys, envelopes, and jobs as the CLI. A phone is a Device, never a Runner: it reads and writes chats, attaches photos and files, dictates messages, configures the account's provider credentials, creates bots for your Runners, and starts turns; the bots keep running on your machines.

bun run mobile       # Metro for the dev client
bun run mobile:ios   # build and run on the iOS simulator (Xcode)

Website

The landing page lives in web/ (TanStack Start on a Cloudflare Worker, shadcn/ui). The product docs at /docs are MDX files in web/content/docs, rendered with Fumadocs.

bun run web          # dev server on http://localhost:3000
bun run web:deploy   # build and wrangler deploy