npx agentspec-cli install 5af4d512-11c4-4459-a3e3-cd755791b0ab --framework ClaudeCode→ .claude/skills/limrun-bazel/SKILL.md
# Bazel on Limrun's build plane `lim bazel setup` points a Bazel workspace at Limrun's build plane: Apple actions run on Limrun's Macs, Android actions on Limrun's Linux workers, and every build of the organization shares one remote cache. Bazel keeps running where it already does; no local Xcode or Android SDK is needed for the remote actions. ## Auth and CLI Install with npm: `npm install --global lim` (0.44.0 or later). The npm package also installs `lim-bazel-credentials`, the credential helper Bazel calls; the standalone tarball and DotSlash builds do not put it on `PATH`, so Bazel cannot authenticate with them. Auth is `lim login` or `LIM_API_KEY` (it may already be set even when the shell does not show it; check before asking). The helper reads only `lim login` or `LIM_API_KEY`, never a key passed with `--api-key`. The CLI is the source of truth: if a flag errors, check `lim bazel setup --help` instead of guessing. ## Set up Run inside the workspace (it walks up to the directory with `MODULE.bazel`): ```bash lim bazel setup ``` It needs Bazel 8 or later and `rules_apple` or `rules_android` in the root `MODULE.bazel`. It writes a gitignored `.limrun/` with the `--config=limrun` configuration and adds a `try-import` to `.bazelrc`. Nothing secret is written: Bazel asks the credential helper for a short-lived token. - **Region:** setup picks the closest region that runs a build plane. `--region <name>` pins one. - **Android:** Linux workers need `rules_cc`, `rules_java`, `protobuf` and `hermetic_android_toolchains` in the root `MODULE.bazel`. Setup prints the missing lines and asks; `--yes` adds them without asking. Without a terminal and without `--yes` it stops and prints the lines, so pass `--yes` in scripts and CI. - **Java runtime:** a `--java_runtime_version` already in `.bazelrc` is kept; otherwise the limrun config uses `remotejdk_17`. - Re-run setup after upgrading the CLI or when the workspace starts using Apple or Android rules. Do not hand-edit `.limrun/`. ## Build ```bash bazel build --config=limrun //your:target ``` Build actions run remotely and Bazel downloads only the top-level outputs (the `.apk` or `.ipa`). Without `--config=limrun`, Bazel builds as before. Own flags for the limrun path go in `user.limrun.bazelrc` at the workspace root; the generated config imports it last and it survives re-running setup. In CI: install `lim` from npm, set `LIM_API_KEY` as a secret, run `lim bazel setup --yes`, then build with `--config=limrun`. ## Run the app Build for the simulator or emulator, then install the `.ipa` or `.apk` path Bazel prints: ```bash lim ios create && lim ios sync bazel-bin/App/App.ipa lim android create && lim android install-app bazel-bin/app/app.apk ``` Re-run `lim ios sync` after each rebuild; it sends only the difference. To drive the running app, use limrun-ios-simulator or limrun-android-emulator. ## Check results The console's Bazel page (`https://console.limrun.com/bazel`) lists the organization's builds from every region, with live output for running builds and the remote cache hit rate per build. ## When a build fails - **Bazel cannot authenticate** or reports a credential helper error: check that `lim-bazel-credentials` is on `PATH` (npm install) and that `lim login` or `LIM_API_KEY` is set where Bazel runs. - **"the build plane could not start a worker"** or **"no linux worker is free"**: transient capacity; retry the build. - **Missing `@androidsdk` or Android toolchain errors:** the `MODULE.bazel` lines are missing. Re-run `lim bazel setup` and accept them. - **Each region keeps its own cache:** the first build in a new region starts cold.
Built on the Agent Skills standard
limrun-xcode-bazel
Legacy: build a Bazel iOS app with `lim xcode rbe` on a dedicated Xcode sandbox and install it on a remote iOS simulator attached to that sandbox. Use only when the workspace already runs on `lim xcode rbe` (its `.limrun/` came from `lim xcode rbe`) or the user explicitly asks for it, or when a `lim xcode rbe` build, upload, or install misbehaves. For every other Bazel build, including new workspaces, iOS or Android, and running the app on a simulator, use limrun-bazel. To tap, type, screenshot, or otherwis
by AgentHub Crawler
limrun-xcode
Build an iOS / Apple app on remote Xcode with `lim xcode build` instead of local xcodebuild, run project commands with `lim xcode run`, or run its XCTest suites with `lim xcode test`, from any environment (Linux, Windows, macOS, VM, container). Use for non-Bazel projects (an `.xcodeproj` / `.xcworkspace`, an XcodeGen `project.yml` with a gitignored project, React Native / Expo native build) when the user wants to build, compile, run code generation or Make targets, test, inspect build logs, reload, produce
by AgentHub Crawler
Sign in to leave a comment.
limrun-gradle
Build an Android app on a remote Gradle sandbox with `lim gradle build` instead of local Gradle or Android Studio, from any environment (Linux, Windows, macOS, VM, container). Use when the user wants to build an APK or AAB, sign a release with an upload key, prepare a Play Store publish, inspect build logs, or select sandbox tools and run shell commands, for native Android projects, React Native, and Expo. To run, tap, screenshot, or otherwise interact with the built APK on an emulator, use limrun-android-e
by AgentHub Crawler