The desktop app

The desktop app is one of three ways to run loopkeep, alongside the lk CLI and the terminal UI — all equal, all driving the same background service (loopkeepd), which runs underneath and keeps going when you close the window. One window supervises every project. This page tours it and documents its settings; where an action also has a lk command, it's noted.

The window

  • Project switcher (top of the sidebar) — switch between registered projects; a badge shows how many approvals are pending in each. Add project sits at the bottom.
  • SidebarInbox, Runs, Workflows, Policies, and Project Settings, all scoped to the selected project. A badge on Inbox counts what's waiting on you.
  • Footer — the background-service status (Connected / Offline), a Refresh button, and your account. The account menu opens Settings and Personal Policies.
  • Banners (bottom of the window) surface things that need a decision: the service is unreachable (Start service), a new version is available (Update & restart), or the project isn't trusted (Trust on Policies).

Projects

A project is a registered folder that holds a .loopkeep/ workspace. Add one from the project switcher, from Settings → Projects, or from the empty state — pick a folder and, if it isn't a loopkeep project yet, Initialize it (see Quickstart). Remove one from Project Settings → Remove this project or Settings → Projects → Delete: the folder and its .loopkeep/ are left on disk, only the registry entry goes away. The home workspace can't be removed.

From the terminal: lk workspaces lists them, lk workspaces add <path> and lk workspaces remove <id> manage them, and lk init creates .loopkeep/.

Background service

The app starts loopkeepd for you and shows its status in the footer. Its settings live under Settings → Background service:

  • Max concurrent runs — the cap on runs in flight across every project (default 4). CLI: lk global-max. A single project can also set its own lower cap from the CLI with lk workspace-max [<n>|clear]; the effective limit is the lower of the two.
  • Keep running after the app is closed — off by default, so quitting the app also stops the service and its automatic firing; turn it on to keep runs and triggers going headless. Takes effect on the next service start.
  • Delete run worktrees after N days and Clean up now — how long finished runs' worktrees are kept before cleanup; checkpoint branches and the event history are always kept. CLI: lk retention <days|off> and lk cleanup.

If the service becomes unreachable or the running build differs from the app, a banner offers to start or restart it.

Command line tool

Settings → Command line tool → Install lk command symlinks /usr/local/bin/lk into the app bundle, so app updates keep the command current. macOS may ask for your administrator password. See Install.

Preferred terminal

Settings → Preferred terminal. When set, take-over shows an Open in terminal button that launches the interactive session for you; left empty, you copy the command and run it yourself. When loopkeep can also drive a multiplexer, take-over offers to open a pane there too. Pick a detected terminal or type a command template using {cmd} (the command to run) and {cwd} (the run's worktree).

Appearance and language

Settings → Appearance (System / Light / Dark) and Settings → Language (System / English / 日本語). Both follow your OS setting by default. These are desktop-only preferences.

Console sign-in

Settings → Console sign-in shows the paired device, the Console, and the gateway, and offers Sign out (which revokes the device). Pairing is optional and enables GitHub and Slack triggers — see Pair with the Console.

Personal Policies

The account menu's Personal Policies opens your home policy, which applies on top of every project, and shows the read-only Built-in floor — the writes loopkeep always asks about, that no layer can relax. See Policies & trust.

Pause all automation

Settings → Danger zone → Pause all automation stops trigger-driven runs across every project until you resume; manual runs and runs already in flight keep going, and per-project settings are untouched. CLI: lk pause --all and lk resume --all.

Updates

When a new version is available, a banner offers Update & restart — the app downloads it and relaunches. This is desktop-only; the CLI is updated with the app bundle it's symlinked into.