LayoutPilot is a macOS utility project for:
- switching keyboard input sources automatically by frontmost application
- editing application-to-layout rules in a native macOS UI
- keeping room for future input automation and local LLM assistance
LayoutPilotCoreholds the reusable data models, persistence, input-source client, and automation engine.LayoutPilotis the native macOS app with a main window, settings scene, and menu bar extra.Testscovers the core configuration and persistence layer.
For normal use, download LayoutPilot.dmg from GitHub Releases, open it, drag
LayoutPilot.app to Applications, launch it, and grant Accessibility
permission in macOS when prompted.
For detailed DMG, source-build, signing, and permission steps, see docs/INSTALL.md.
Generate the Xcode project, then run:
./script/build_and_run.shThe run script builds with the configured development signature, copies the app to
/Applications/LayoutPilot.app, verifies the copied bundle signature, and launches
that installed app. Keeping the bundle at a stable /Applications path makes the
macOS Login Items and Accessibility permission state more predictable during local
development.
Since LayoutPilot uses a low-level Event Tap via CoreGraphics (CGEvent.tapCreate) for key interception, macOS requires Accessibility permissions, which in turn require valid code signing.
The project configuration in project.yml is preset with the original developer's credentials. If you are cloning and building this project:
- Open
project.yml. - Locate the
CODE_SIGN_IDENTITYandDEVELOPMENT_TEAMfields undersettings.base(lines 10-11). - Replace them with your own Apple Developer credentials, or configure automatic signing in Xcode.
- Run
xcodegenand./script/build_and_run.sh runto build and launch with your signature.
- The app seeds example rules for Word, Notion, and Terminal.
- The
LLMsettings block is a placeholder for later local model integration. - Persistent configuration lives in
~/Library/Application Support/LayoutPilot/configuration.json.