About openclaw-landable-bug-sweep
An autonomous maintainer workflow for OpenClaw bug sweeps that aims to produce verified, landable PRs rather than investigation notes. It defines candidate criteria, ownership and authorization gates, proof requirements, and exact-head review and CI checks.
Key features
- 01Clustering and screening bug candidates
- 02Assigning explicit worker and file ownership
- 03Proving root causes before patching
- 04Requiring exact-head review and green CI
- 05Tracking PRs and cleanup in a ledger
Use cases
- 01Preparing a bounded batch of bugfix PRs
- 02Assessing supplied PRs for readiness
- 03Filtering out feature or high-risk changes
- 04Verifying fixes and related duplicate cleanup
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ openclaw/ openclaw --skill openclaw-landable-bug-sweepAfter installing, type/openclaw-landable-bug-sweepin Claude Code to confirm it loaded.
Bundled filesagents/openai.yaml
Details
From the project READMEOpenClaw Landable Bug Sweep
Autonomous maintainer workflow for producing a requested batch of landable OpenClaw bugfix PR URLs. Use for broad issue/PR sweeps where the bar is high and the output is PRs, not notes. Do not use for plugin SDK/API boundary work; those need separate architecture review.
Mandatory orchestration contract
- Only the original user-facing root conversation is the control plane. It decomposes work, assigns explicit issue/PR/file ownership, directly spawns bounded collaboration workers and independent verifiers, coordinates safety, tracks completion, and reports actual worker-verified terminal outcomes.
- A delegated collaboration subagent is a hands-on execution owner, not another user-facing root orchestrator. It performs its assigned work directly; this contract must not recursively prevent workers from acting. Nested workers require explicit root authorization plus root-tracked capacity, ownership, and completion. Do not create separate Codex app tasks or threads.
- Workers perform all discovery, source/dependency/Codex inspection,
reproductions, issue/PR investigations, edits/refactors, tests/proof/CI,
GitHub reads/writes, comments, closures, commits, pushes, and any separately
authorized landing. The acting worker personally verifies dependency
contracts and inspects sibling
../codexbefore making a Codex verdict. - Root coordinates checkout/file ownership, serializes shared Git/ref/index mutations and conflicting test/edit activity, tracks exact heads, and enforces authorization, source-trust, security, ownership, and landing gates through assigned workers. Root never switches from orchestration to execution because a worker stalls, fails, or lacks capacity; reassign the bounded work instead.
Requested authority
- The default deliverable is verified landable PR URLs, not merged PRs. An explicitly requested repair-and-prepare sweep authorizes workers to repair, refactor, verify, commit, push, and update PRs within its requested scope; it does not authorize landing without an explicit landing request.
review,triage,list, or alandable-shortlistalone remains read-only: no unsolicited push, public comment, closure, replacement PR, or merge.- An explicit autonomous
process,resolve, orfix-and-landrequest for named items also authorizes workers to close those proven fixed on currentmainand land verified fixes through$openclaw-pr-maintainerand the repo-nativescripts/prworkflow. Preserve exact-head and ownership gates. - Explicit full-authority unattended execution is standing approval for all
evidence-backed work within the named sweep, including necessary task-owned
or repo-managed PR worktrees, credited PR repair/replacement, proof comments,
exact-head CI repair, scoped publication, proven current-
mainclosures, and requested native landing. Never ask routine approval questions or disturb unrelated dirty changes; the root stays orchestration-only and workers own execution through verified completion. Preserve source-trust, direct acting- worker Codex inspection, required exact-head CI/security/owner gates, and explicit exact-count/scope approval for more than 50 close/reopen actions. - Optional unavailable provider/channel live proof may be replaced only when the user explicitly relaxes it: use failing/passing focused owner-boundary regression, direct producer/caller/sibling/dependency-source evidence, independent review, and green exact-head required CI; disclose the missing live/rank-up proof. Never waive mandatory external-API, security-sensitive, risk-required, or explicitly requested live verification.
Target
Use batch_size from the request, defaulting to 5 and capped at 20.
Return up to that many qualified PR URLs, each with:
- bug summary
- why the fix is low-risk
- proof: exact-head local/Testbox/live commands or run IDs
- autoreview: clean result on the exact head being shown
- CI green on the exact pushed PR head
- issue/duplicate cleanup done or still pending
The URLs may be existing PRs that were reviewed/fixed, or new PRs created from issues/clusters.
Do not present a PR URL until its exact published head is left-tested, autoreviewed clean, and verified green in live GitHub CI.
Refresh a PR branch only for an actual conflict, failing exact-head check or repo-native guard, explicit user request, or proven material stale-base risk; never rebase merely because main advanced.
If production code, tests, or the reviewed head changes after autoreview, rerun autoreview before showing the URL.
Do not pad a batch when the bounded search yields fewer qualified PRs.
Inputs
batch_size: requested number of landable PRs; default5, maximum20.source_mode:discoveryorprovided-prs; defaultdiscovery.provided_prs: explicit PR refs whensource_mode=provided-prs.
In provided-prs mode, inspect only the supplied PRs plus directly linked duplicate/canonical refs unless broader discovery is required to prove the best fix.
Companion Skills
Use $gitcrawl for discovery/clustering, $openclaw-pr-maintainer for live GitHub mutation rules, $github-author-context when contributor trust matters, $openclaw-testing for proof choice, $autoreview before publishing/landing, and $crabbox for broad/E2E/live proof.
Candidate Bar
Accept only when all are true:
- bug or paper cut, not feature/product/support/docs-only
- root cause is proven in current code
- dependency behavior checked via upstream docs/source/types when relevant
- production/runtime diff is small, ideally much smaller than 500 LOC and always below 500 LOC
- production LOC is net-neutral or net-negative when feasible; count tests separately and justify any production increase
- tests may be larger, but focused
- no new dependency
- no new config option
- no backward-incompatible behavior
- no security/product/owner-boundary decision needed
- no plugin SDK, public plugin API, or
src/plugin-sdk/**boundary change - any refactor stays within the proven root cause, owner boundary, and small-sweep risk limits
- focused proof is feasible
- existing branch can be safely updated when needed, or an authorized replacement is justified
Good examples:
- provider parameter mismatch proven against dependency/API contract
- CLI command diverges from adjacent command behavior
- narrow runtime state/serialization bug with failing test
- issue already fixed on current
main, with proof and closeable duplicates
Reject:
- feature requests, new knobs, migrations, release work, workflow policy, support
- plugin SDK/API boundary changes, including compatibility shims, new SDK methods, SDK exports, or plugin-facing channel/provider seams
- auth/security boundary changes unless explicitly assigned
- bugs requiring unavailable credentials for mandatory external-API, security, risk-required, or explicitly requested live verification
- PRs with red CI unless you fix, update the head as needed, push, and recheck them green
- PRs whose changed head was not pushed or whose exact-head CI was not verified live
- PRs whose final head has not passed
$autoreview - fixes requiring an out-of-scope product, architecture, or ownership decision
- speculative reports without reproducible/provable cause
- UI/UX changes requiring product judgment
Sweep Loop
- Start clean:
git status -sb- update a clean, exclusively owned base checkout with
git pull --ff-onlyonly when needed and root-authorized - never pull, switch, or mutate a shared checkout while sibling workers are active
- verify branch is expected, usually
main
- Build candidate clusters:
gitcrawlopen issues/PRs, neighbors, and search- live
gh issue/pr view - include PRs linked from issues and duplicates
- For each cluster:
- read issue/PR body, comments, labels, linked refs, current source, adjacent tests
- exclude PRs authored by wide-access maintainers until
created_atis at least 14 days old; only a named PR or explicit maintainer-work request overrides - identify opener/author and preserve credit
- decide:
repair-existing-pr,create-new-pr,fixed-on-main,duplicate, orreject; close only when authorized
- Prove before patching:
- failing test, focused repro, log/source proof, or dependency contract proof
- if already fixed on
main, prove with current source/test/commit; close kindly only when authorized
- Patch:
- rewrite/refactor an existing editable PR into the correct owner-boundary fix first, even when its incoming implementation is the wrong shape
- create an authorized replacement only when the original branch is uneditable or unsafe to update; preserve credit and close the source only after the replacement exists and closure is authorized
- if no PR exists, create one only when publication is authorized
- add regression test when it fits
- release-note context for user-facing fixes in PR body or commit message; credit human reporter/contributor when known
- Review, verify, and publish:
- refresh the PR branch only for a real conflict, failing exact-head check or wrapper guard, explicit request, or demonstrated material stale-base risk
- resolve actual conflicts or CI failures rather than counting the PR as ready
- do not add
CHANGELOG.mdduring normal sweep PRs; release automation generates it from PRs and commits - left-test the exact candidate head with the smallest meaningful local/Testbox/live command that proves the bug
- run
$autoreviewuntil no accepted/actionable findings remain before creating, updating, or presenting the PR URL - create/update PR with real body and proof fields when authorized
- push the exact reviewed head only when an authorized change requires publication
- verify live GitHub CI is green for that pushed head; do not count pending, red, dirty, conflicting, or externally blocked PRs in the five
- Hygiene:
- close duplicates and fixed-on-main issues/PRs with proof only when closure is authorized; otherwise report the evidence
- mutate more than five associated items in one cluster only when the explicitly authorized bounded scope includes them; more than 50 close/reopen actions still require separate exact-count/scope approval
- comments must be kind, concrete, and include proof/PR/commit links
- Repeat until
batch_sizelandable PR URLs are ready or the bounded qualified queue is exhausted.
PR Body Proof
Use the repo PR template. Include authored ## What Problem This Solves and
## Evidence sections. Keep the body focused on intent and the most useful
validation evidence; inspect the code, tests, and CI before judging correctness.
Existing PR Rules
- Review code path beyond the diff before trusting it.
- If PR is good: fix concrete issues, left-test and autoreview the exact head, publish authorized changes, and require exact-head green CI before showing it.
- If PR is incomplete or wrong-layer but editable: rewrite/refactor the existing PR at the root-cause owner, preserve author credit, and verify its corrected head.
- If PR is duplicate or fixed on current
main: comment proof and close only when closure is authorized; otherwise report the evidence. - If the source branch is uneditable or unsafe to update: create a replacement only when authorized, preserve useful commits/credit, and close the original only after the replacement exists and closure is authorized.
- If CI turns red after local proof, treat that as normal work: inspect the failing job, fix or reject, rerun, and only count the PR once green.
Output Ledger
Maintain a running ledger:
accepted:
- PR URL:
source refs:
bug:
root cause:
fix:
production LOC:
test LOC:
risk:
head/base status:
left-test:
autoreview:
CI:
credit/thanks:
cleanup:
rejected:
- ref:
reason:
closed:
- ref:
reason:
proof/comment:
Final answer:
- the requested number of accepted PR URLs, or the smaller qualified count with the exhausted-search reason
- 2-4 sentence explainer per PR
- proof/CI state per PR
- closed duplicates/fixed-on-main refs
- current branch/status