
OpenClaw CI Limits
FreeOptimize CI capacity for OpenClaw workflows.
Free · Opens the source repo
What OpenClaw CI Limits does
OpenClaw CI Limits is a specialized skill designed for managing the capacity and performance of CI workflows within the OpenClaw ecosystem. It focuses on optimizing GitHub Actions and Blacksmith CI configurations to ensure that CI jobs run efficiently without unnecessary delays. By using this skill, developers can accurately assess and adjust runner registration budgets, monitor queue health, and implement safe ramp-up and ramp-down strategies for CI resources. This is particularly useful for teams that rely on OpenClaw for continuous integration and need to maintain high throughput while managing resource constraints.
The skill provides a framework for diagnosing bottlenecks in the CI process. It emphasizes the importance of understanding the underlying causes of CI slowdowns, whether they stem from runner registration limits, Blacksmith control plane issues, or workflow dependencies. Users are guided to collect relevant metrics and analyze the current state of their CI environment before making any adjustments. This proactive approach helps to mitigate risks associated with overloading CI resources and ensures that teams can respond effectively to changing demands.
OpenClaw CI Limits is ideal for developers and CI/CD engineers who are responsible for maintaining the health of their CI pipelines. It is particularly beneficial for teams that frequently push updates and need to ensure that their CI infrastructure can handle bursts of activity without falling behind. By leveraging the insights provided by this skill, teams can make informed decisions about how to allocate resources and optimize their workflows for better performance.
In summary, this skill equips users with the tools and knowledge necessary to fine-tune their CI capacity, making it an essential resource for anyone involved in the OpenClaw development process.
When to use it
Use this skill when tuning CI workflows in OpenClaw, especially during periods of high activity or when diagnosing slow CI runs.
When not to use it
This skill is not suitable for general test failure triage or issues unrelated to CI capacity management.
What you can build with it
Tuning CI Workflows
Use this skill to optimize your CI workflows during peak development periods to maintain high throughput.
Diagnosing Slow CI Runs
Employ the skill to identify and analyze the root causes of slow or queued CI jobs, ensuring timely resolutions.
Managing Resource Constraints
Utilize this skill to effectively manage and allocate CI resources, preventing overload and ensuring smooth operations.
How to install OpenClaw CI Limits
View source1. Install with the skills CLI
npx skills add openclaw/openclaw/openclaw-ci-limits --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by openclawOpenClaw CI Limits
Use this skill for CI capacity changes, not ordinary test failure triage. The goal is to keep OpenClaw fast while distinguishing runner registration, runner availability, Blacksmith control-plane health, and downstream queue drains.
Core Facts
- Do not assume the scarce resource. Prove whether pressure is runner registrations, eligible runner availability, Blacksmith capacity/control plane, workflow dependencies, test runtime, or a downstream queue writer.
- GitHub runner registrations for
openclawcurrently report a 10,000 per 5-minute bucket inactions_runner_registration. Verify the live bucket before each tuning pass because GitHub can change it. Theopenclaworganization shares one bucket. - Core REST quota does not draw down this bucket. Check
actions_runner_registrationseparately; core quota can be healthy while runner registration is throttled. - Use about 60% of the live bucket as the operating target. With the current 10,000-registration bucket, keep planned Blacksmith burst load under 6,000 registrations per 5 minutes and leave the rest for other repos, retries, and burst overlap.
- Jobs that route, notify, summarize, choose shards, or run short CodeQL quality scans should stay on GitHub-hosted runners unless measured evidence says Blacksmith is required.
First Checks
Before changing CI, collect current pressure:
ghx api rate_limit --jq '{core:.resources.core,graphql:.resources.graphql,search:.resources.search,actions_runner_registration:.resources.actions_runner_registration}'
ghx run list -R openclaw/openclaw --limit 20 --json databaseId,status,conclusion,workflowName,event,headBranch,createdAt,updatedAt,url
ghx run list -R openclaw/clawsweeper --limit 20 --json databaseId,status,conclusion,workflowName,event,headBranch,createdAt,updatedAt,url
ghx api repos/openclaw/clawsweeper/actions/runs/<run-id>/jobs --paginate --jq '.jobs[] | {id,name,status,conclusion,labels,created_at,started_at,completed_at,runner_name,runner_group_name}'
blacksmith testbox list --all
curl -fsS https://clawsweeper.openclaw.ai/api/status | jq '{generated_at,fleet,diagnostics:{errors:.diagnostics.errors}}'
curl -fsS https://clawsweeper.openclaw.ai/api/exact-review-queue | jq '{generated_at,review:.lanes.review,publication:.lanes.publication,state_writer,state_append}'
node scripts/ci-run-timings.mjs --latest-main
node scripts/ci-run-timings.mjs --recent 10
For a suspicious queued run, inspect its jobs. A run-level queued status does
not reveal whether the job is waiting on dependencies or has no eligible
runner. Compare created_at, started_at, labels, and runner_name. Recheck
stale queued runs live before canceling them; cancel only runs proven obsolete.
scripts/ci-run-timings.mjs start delay can include workflow dependency wait
plus runner queue time. It is trend evidence, not runner-pressure proof alone.
Read:
.github/workflows/ci.yml.github/workflows/codeql-critical-quality.ymldocs/ci.mdtest/scripts/ci-workflow-guards.test.ts- touched planner files under
scripts/lib/*ci*,scripts/lib/*test-plan*, orscripts/ci-changed-scope.mjs
Diagnose The Bottleneck
Classify the issue before changing caps:
- Runner-registration throttle: many jobs queued before runner assignment,
Blacksmith/GitHub reports 403/429 or spam-style 422 responses from
generate-jitconfig, and API core quota is still healthy. Treat 422 as this signal only when the request payload is otherwise valid. Fix burstiness and Blacksmith job count. - Blacksmith capacity: Blacksmith dashboard shows actual concurrency caps or unavailable capacity. Do not solve this with GitHub workflow fanout alone.
- Blacksmith Testbox control plane: list, warm, status, or run calls time out before a lease is returned. This is separate from Actions runner registration and Actions job capacity. Trusted source may use the documented local fallback; untrusted source stays blocked.
- Unavailable runner label: a job is queued with a custom
runs-onlabel,started_atandrunner_nameremain empty, and no eligible runner exists. Restore an available hosted or registered label; fanout cannot fix it. - Workflow dependency wait: the job is queued but required predecessors are not terminal. Fix or wait for the dependency; do not call the whole delay runner queue pressure.
- OpenClaw test runtime: jobs start quickly but one lane dominates wall time.
Use
$openclaw-test-performanceinstead of runner tuning. - Real failing CI: one job fails after starting. Use
$github:gh-fix-cior$openclaw-testing, not this skill. - ClawSweeper review backlog: review pending/ready grows while publication
and state writers remain healthy. Tune review admission/workers in
openclaw/clawsweeper. - ClawSweeper publication backlog: publication pending/ready and oldest age grow, net drain is zero or negative, or dead letters rise. Inspect publication batches, state-writer coordination, and GitHub mutation latency first.
- State materializer/append backlog:
state_append.pending_rows,pending_bytes, or oldest age grows while the materializer is queued or absent. Recover that sole drain first; more review workers make it worse.
Registration Budget Math
Estimate worst-case registrations for a change before editing:
new Blacksmith registrations ~= number of Blacksmith jobs that can become queued
inside one 5 minute window
For matrix jobs, count every row that can start in the 5-minute window.
strategy.max-parallel only caps simultaneous rows; short rows can turn over
and register more runners before the window resets. Use job duration, retries,
and queue turnover to justify any lower estimate. Add non-matrix Blacksmith jobs
such as preflight, security-fast, build-artifacts, and platform lanes.
For repeated pull-request pushes, multiply by the number of runs expected to
reach Blacksmith admission in the same 5-minute window, including runs canceled
after admission. Canonical main is single-flight: one run completes while
GitHub's default single pending slot is replaced by the newest push. Count one
active main matrix plus its next pending matrix, not every intermediate merge.
Reject a change unless the org-level worst case stays below about 60% of the live bucket. With the current 10,000-registration bucket, keep planned Blacksmith burst load under 6,000 registrations per 5 minutes with headroom for ClawSweeper, ClawHub, Clownfish, OpenClaw RTT, and Clawbench.
Safe Levers
Prefer these in order:
- Preserve cancel-in-progress for superseded pull-request heads.
- Preserve canonical
mainsingle-flight without canceling its running integration cycle; GitHub's default pending slot coalesces to the newest tip. - Move high-frequency, short, non-build jobs to
ubuntu-24.04. - Reduce matrix rows by bundling related tests inside one runner job when the combined job stays under timeout and keeps useful failure names.
- Lower
strategy.max-parallelfor bursty Blacksmith matrices. - Right-size runners from timing evidence. Use fewer/larger jobs only when elapsed time improves enough to justify registration count.
- Split truly slow tests with
$openclaw-test-performance; do not hide a slow test problem by registering more runners.
Do not:
- add another Blacksmith installation expecting a higher registration bucket;
- move CodeQL Critical Quality back to Blacksmith;
- raise all
max-parallelvalues at once; - make manual
workflow_dispatchruns cancel normal push/PR validation; - delete coverage just to reduce runner count;
- treat cancelled superseded pull-request runs as failures without checking the newest run for the same ref.
- cancel old queued runs from a stale snapshot; re-query the exact run first and preserve any current run that still owns live work.
Current OpenClaw Knobs
These are intentionally guarded by test/scripts/ci-workflow-guards.test.ts:
CIconcurrency key version, PR cancellation, and non-canceling canonicalmainsingle-flight with one coalesced pending tip.preflightand hostedsecurity-faststart immediately without a debounce or standalone admission job. On Node-relevant canonical main pushes, preflight also owns the sole dependency sticky-disk write and 8 GiB prune before fanout; replacement visibility is proved only by a later exact-marker restore because Blacksmith snapshot promotion can lag job completion.- CI matrix caps: fast/check lanes at 12, Node test shards at 28, Windows and Android at 2.
- Canonical PR Node tests use one precise changed-target job when possible;
broad, deleted, unknown, or planner-failed changes fall back to the 14-job
compact full-suite plan. Targeted plans retain the full built-artifact
boundary gate.
main, manual, and release runs stay full. build-artifactsonblacksmith-16vcpu-ubuntu-2404.- lower-weight Node/check shards on
blacksmith-4vcpu-ubuntu-2404. - heavy retained Linux/Android shards on
blacksmith-8vcpu-ubuntu-2404. - CodeQL Critical Quality on
ubuntu-24.04with noblacksmith-labels. - Vitest/test compile caches are restore-only in CI and use immutable Actions caches; the daily/dispatch warmer is their sole writer. Build compile cache writes rotate at most once per UTC day. PRs create no runtime-cache archives.
When changing one knob, update docs/ci.md and the guard test in the same PR.
Validation
For workflow-only or docs/skill-only changes in a Codex worktree:
node scripts/run-vitest.mjs test/scripts/ci-workflow-guards.test.ts
node --import tsx scripts/check-workflows.mts
node scripts/docs-list.js
./node_modules/.bin/oxfmt --check .github/workflows/ci.yml .github/workflows/codeql-critical-quality.yml docs/ci.md test/scripts/ci-workflow-guards.test.ts .agents/skills/openclaw-ci-limits/SKILL.md .agents/skills/openclaw-ci-limits/agents/openai.yaml
git diff --check
If pnpm docs:list tries to reconcile dependencies in a linked Codex worktree,
stop and use node scripts/docs-list.js.
For a PR before requesting maintainer approval:
.agents/skills/autoreview/scripts/autoreview --mode branch --base origin/main
ghx pr checks <pr> -R openclaw/openclaw --watch --interval 15
Use hosted exact-head gates for CI workflow tuning. Do not burn local
pnpm test on unrelated full-suite proof.
Only after the maintainer explicitly asks you to prepare or land the PR, run the repo-native mutating wrapper:
scripts/pr review-init <pr>
scripts/pr review-artifacts-init <pr>
scripts/pr review-validate-artifacts <pr>
OPENCLAW_TESTBOX=1 scripts/pr prepare-run <pr>
prepare-run can push a prepared commit to the PR branch. Only run
scripts/pr merge-run <pr> after the maintainer has explicitly asked you to
land the PR. Both commands mutate GitHub state.
Post-Land Monitoring
After merge, watch at least one fresh main cycle and the adjacent repos:
ghx run list -R openclaw/openclaw --limit 20 --json databaseId,status,conclusion,workflowName,event,headBranch,createdAt,updatedAt,url
for repo in openclaw/clawsweeper openclaw/clawhub openclaw/clownfish openclaw/openclaw-rtt openclaw/clawbench; do
ghx run list -R "$repo" --limit 12 --json databaseId,status,conclusion,workflowName,event,headBranch,createdAt,updatedAt,url
done
curl -fsS https://clawsweeper.openclaw.ai/api/exact-review-queue | jq '.'
Report:
- exact PR/commit landed;
- expected registration reduction or added headroom;
- CI run status and slowest/queued jobs;
- queued job labels, runner assignment, and dependency state for any outlier;
- Blacksmith Actions runner evidence separately from Testbox control-plane health;
- ClawSweeper queue pending, dispatching, leased, oldest pending age;
- publication net drain/dead letters, state-writer queued/waiting, and state append rows/bytes/oldest item;
- any real failures that remain outside runner registration.
Frequently asked questions about OpenClaw CI Limits
Similar skills
Turborepo
Optimized build system for JavaScript/TypeScript monorepos.
Azure Pipelines Validation
Streamline your Azure DevOps pipeline changes locally.
Azure Developer CLI
Streamline your Azure project workflows with best practices.
Azure Container Registry CLI
Manage Azure Container Registry resources with ease.
Aspire
Build and orchestrate polyglot distributed applications seamlessly.
Vercel CLI
Manage and deploy Vercel projects from the command line.
