Skip to content

helpmebro911/clawsweeper

 
 

Repository files navigation

ClawSweeper

ClawSweeper is the conservative OpenClaw maintenance bot for openclaw/openclaw.

It keeps one markdown report per open issue or PR, publishes one durable Codex automated review comment when useful, and only closes items when the evidence is strong.

Guardrails

ClawSweeper may propose a close only when the item is clearly one of these:

  • implemented on current main
  • not reproducible on current main
  • better suited for ClawHub skill/plugin work than core
  • duplicate or superseded by a canonical issue/PR
  • concrete but not actionable in this source repo
  • incoherent enough that no action can be taken
  • stale issue older than 60 days with too little data to verify

Maintainer-authored items are never auto-closed. Everything else stays open. Issues with an open PR that references them using GitHub closing syntax such as Fixes #123 stay open until that PR merges or is closed. Open issue/PR pairs from the same author stay open together unless the paired item is already resolved or a maintainer explicitly asks to close one side.

Dashboard

Last dashboard update: Apr 27, 2026, 11:22 UTC

Current Run

Workflow status

Updated: Apr 27, 2026, 11:22 UTC

State: Review comments checked

Checked selected durable Codex review comments and synced missing or stale comments. Synced: 417. Item numbers: 6457,17098,24754,25295,25789,27771,32558,39604,40155,40165,40209,40215,40230,40277,40287,40366,40387,40392,40402,40423,40463,40472,40522,40611,40641,40673,40694,40716,40875,41025,41082,41088,41108,41111,41120,41135,41168,41195,41199,41243,41265,41272,41283,41299,41304,41346,41355,41366,41372,41410,41418,41444,41461,41473,41474,41483,41494,41495,41501,41502,41517,41537,41548,41555,41561,41572,41583,41588,41594,41608,41609,41619,41624,41649,41657,41665,41670,41671,41676,41685,41718,41722,41736,41740,41744,41750,41755,41764,41779,41795,41799,41803,41809,41826,41833,41837,41853,41854,41858,41861,41862,41866,41879,41882,41892,41897,41899,41933,41936,41940,41943,41949,41954,41955,41964,41983,41986,41991,41993,42001,42007,42009,42010,42011,42027,42039,42052,42059,42065,42099,42156,42157,42174,42196,42197,42201,42207,42208,42222,42223,42243,42245,42252,42258,42259,42261,42271,42273,42301,42303,42304,42317,42319,42322,42330,42351,42354,42361,42373,42381,42391,42402,42408,42424,42425,42452,42461,42475,42480,42497,42504,42533,42538,42539,42544,42555,42571,42585,42586,42591,42592,42617,42631,42636,42637,42646,42647,42648,42650,42651,42652,42654,42656,42663,42669,42674,42675,42677,42683,42690,42698,42713,42715,42729,42771,42798,42802,42810,42820,42824,42832,42837,42840,42843,42847,42853,42854,42859,42862,42867,42877,42895,42898,42904,42908,42933,42936,42937,42952,42962,42978,42986,42987,42998,42999,43006,43013,43015,43028,43063,43064,43065,43068,43095,43117,43141,43145,43151,43176,43195,43202,43204,43211,43244,43249,43253,43260,43276,43286,43306,43341,43348,43367,43390,43404,43410,43411,43416,43440,43441,43443,43467,43481,43495,43512,43527,43529,43563,43565,43568,43570,43585,43588,43609,43618,43656,43658,43659,43737,43752,43775,43791,43808,43810,43816,43835,43848,43935,43938,43951,43953,43992,44013,44023,44027,44202,44996,50429,52115,52894,52928,52963,53008,53092,53311,53390,53742,53760,53881,53889,53969,53989,55047,56161,56915,58070,58481,59787,60981,61151,62359,62431,62482,63084,64086,64127,64150,64463,65691,65983,66238,66251,66279,66312,66392,66415,66521,66614,66650,66720,66771,66773,66792,66926,67019,67035,67088,67097,67107,67113,67191,67202,67244,67332,67341,67345,67363,67376,67378,67393,67394,67404,67433,67434,67461,67466,67472,67477,67488,67493,67547,67552,67569,67584,67587,67594,67595,67626,67639,67655,67661,67662,67669,67680,67682,67687,67692,67693,67694,67703,67706,67709,67716,67731,67734,67750,67751,67758,67761,67766,68161,70651,72468,72476,72478,72482,72484,72485,72486,72489,72490. Run: https://github.com/openclaw/clawsweeper/actions/runs/24990938121

Queue

Metric Count
Open issues in openclaw/openclaw 3546
Open PRs in openclaw/openclaw 3457
Open items total 7003
Reviewed files 6771
Unreviewed open items 232
Archived closed files 13060

Review Outcomes

Metric Count
Fresh reviewed issues in the last 7 days 3478
Proposed issue closes 4 (0.1% of reviewed issues)
Fresh reviewed PRs in the last 7 days 3290
Proposed PR closes 4 (0.1% of reviewed PRs)
Fresh verified reviews in the last 7 days 6768
Proposed closes awaiting apply 8 (0.1% of fresh reviews)
Closed by Codex apply 10217
Failed or stale reviews 3

Cadence

Metric Coverage
Hourly cadence coverage 28/718 current (690 due, 3.9%)
Hourly hot item cadence (<7d) 28/718 current (690 due, 3.9%)
Daily cadence coverage 1821/4204 current (2383 due, 43.3%)
Daily PR cadence 1157/2882 current (1725 due, 40.1%)
Daily new issue cadence (<30d) 664/1322 current (658 due, 50.2%)
Weekly older issue cadence 1849/1849 current (0 due, 100%)
Due now by cadence 3305

Audit Health

Last audit: Apr 27, 2026, 07:11 UTC

Status: Action needed

Targeted review input: 64563,65635,56915,61960,62112,62431,64150,71072

Metric Count
Scan complete yes
Open items seen 7132
Missing eligible open records 2
Missing maintainer-authored open records 94
Missing protected open records 1
Missing recently-created open records 149
Archived records that are open again 0
Stale item records 1
Duplicate records 0
Protected proposed closes 0
Stale reviews 6
Item Category Title Detail
#64563 Missing eligible open fix(whatsapp): lazy default auth dir for profile state (#64555) eligible
#65635 Missing eligible open fix(gateway): keep explicit loopback binds on 127.0.0.1 eligible
#56915 Stale review [Bug]: [Bug] Skills scanner ignores subdirectories under ~/.openclaw/skills/ items/56915.md

Latest Run Activity

Latest review: Apr 27, 2026, 11:08 UTC. Latest close: Apr 27, 2026, 10:50 UTC. Latest comment sync: Apr 27, 2026, 11:22 UTC.

Window Reviews Close decisions Keep-open decisions Failed/stale reviews Closed Comments synced Apply skips
Last 15 minutes 12 0 12 0 0 417 2
Last hour 890 26 864 0 13 970 4
Last 24 hours 4119 481 3638 1 341 1777 13

Recently Closed

Item Title Reason Closed Report
#72519 Cost estimate omits cache read tokens (cacheRead cost not applied... duplicate or superseded Apr 27, 2026, 10:50 UTC closed/72519.md
#72517 Add session cost to /status output not actionable Apr 27, 2026, 10:50 UTC closed/72517.md
#72505 Gateway infinite loop during initialization on v2026.4.23+ (CPU 100%+, never reaches HTTP bind) already implemented on main Apr 27, 2026, 10:50 UTC closed/72505.md
#72497 [Bug]: Tool calls invisible in Telegram DM despite verbose: on — user cannot see agent activity already implemented on main Apr 27, 2026, 10:50 UTC closed/72497.md
#68878 [codex] Optimize gateway session listing before full row construction duplicate or superseded Apr 27, 2026, 10:50 UTC closed/68878.md
#68866 fix(auth): invalidate stale runtime auth snapshots when auth files change already implemented on main Apr 27, 2026, 10:50 UTC closed/68866.md
#68865 fix(feishu): add application-level WebSocket reconnection with backoff duplicate or superseded Apr 27, 2026, 10:50 UTC closed/68865.md
#68831 perf: share JITI instances across plugins with identical alias configs already implemented on main Apr 27, 2026, 10:49 UTC closed/68831.md
#68611 [Bug]: WebChat CLI runner — assistant replies invisible + user messages erased after each turn already implemented on main Apr 27, 2026, 10:49 UTC closed/68611.md
#66515 feat: add YandexGPT as native provider via Yandex AI Studio belongs on ClawHub Apr 27, 2026, 10:49 UTC closed/66515.md
Recently Reviewed (latest 10)
Item Title Outcome Status Reviewed
#53989 Slack event dispatch broken after 2026.3.23-1 → 2026.3.23-2 update (regression) keep_open / kept_open complete Apr 27, 2026, 11:08 UTC
#67466 fix(feishu): reduce startup latency by parallelizing probe and capping timeouts keep_open / kept_open complete Apr 27, 2026, 11:08 UTC
#65691 feat(slack): add message search support via search.messages API keep_open / kept_open complete Apr 27, 2026, 11:08 UTC
#67244 Explicit ACP agent runs: embedded backend visibility failure and stale final JSON state after sessions_yield keep_open / kept_open complete Apr 27, 2026, 11:07 UTC
#65983 Background PTY exec runs can survive restart/session loss and become untracked orphan process trees keep_open / kept_open complete Apr 27, 2026, 11:07 UTC
#67477 fix(whatsapp): emit hooks for auto-replies keep_open / kept_open complete Apr 27, 2026, 11:07 UTC
#67587 Discord outbound messages should reliably convert known @AgentName references into real <@userId> mentions keep_open / kept_open complete Apr 27, 2026, 11:07 UTC
#72476 Pass through configured thinking budgets keep_open / kept_open complete Apr 27, 2026, 11:07 UTC
#67761 fix: remove truncated preview from inbound system events keep_open / kept_open complete Apr 27, 2026, 11:07 UTC
#67393 [Bug]: Massive virtual memory bloat (22GB+ VIRT) immediately after Gateway startup, identical to previously reported issue #6413. This issue was closed as "not planned" but the problem persists on the latest stable release. keep_open / kept_open complete Apr 27, 2026, 11:07 UTC

How It Works

ClawSweeper is split into a scheduler, a review lane, and an apply lane.

Scheduler

The scheduler decides what to scan and how often. New and active items get more attention; older quiet items fall back to a slower cadence.

  • hot/new and recently active items are checked hourly, with a 5-minute intake schedule for the newest queue edge
  • pull requests and issues younger than 30 days are checked daily once they leave the hot window
  • older inactive issues are checked weekly
  • apply wakes every 15 minutes and exits quickly when there are no unchanged high-confidence close proposals

Review Lane

Review is proposal-only. It never closes items.

  • A planner scans open issues and PRs, then assigns exact item numbers to shards.
  • Manual runs can pass item_number or comma-separated item_numbers to review exact Audit Health findings without scanning for a normal batch.
  • Each shard checks out openclaw/openclaw at main.
  • Codex reviews with gpt-5.5, high reasoning, fast service tier, and a 10-minute per-item timeout.
  • Each item becomes items/<number>.md with the decision, evidence, suggested comment, runtime metadata, and GitHub snapshot hash.
  • High-confidence allowed close decisions become proposed_close.
  • After publish, the lane checks the selected items' single marker-backed Codex review comment. Missing comments and missing metadata are synced immediately; existing comments are refreshed only when stale, currently weekly.

Apply Lane

Apply reads existing reports and mutates GitHub only when the stored review is still valid.

  • Updates the single marker-backed Codex automated review comment in place.
  • Closes only unchanged high-confidence proposals.
  • Reuses the review comment when closing; no duplicate close comment.
  • Moves closed or already-closed reports to closed/<number>.md.
  • Moves reopened archived reports back to items/<number>.md as stale.
  • Commits checkpoints and dashboard heartbeats during long runs.

Apply wakes every 15 minutes, no-ops when there are no unchanged high-confidence close proposals, and narrows scheduled runs to the currently eligible proposal list so idle runs do not scan unrelated keep-open records. It defaults to all item kinds, no age floor, a 2-second close delay, and 50 fresh closes per checkpoint. If it reaches the requested limit, it queues another apply run with the same settings.

There is still one deterministic apply path for writes. Review can propose and sync stale public review comments, but closing remains guarded by apply so a fresh GitHub snapshot, labels, maintainer-authorship, and unchanged item state are checked immediately before mutation.

Safety Model

  • Maintainer-authored items are excluded from automated closes.
  • Protected labels block close proposals.
  • Open PRs with GitHub closing references block issue closes until the PR is resolved.
  • Open same-author issue/PR pairs block one-sided closes.
  • Codex runs without GitHub write tokens.
  • CI makes the OpenClaw checkout read-only for reviews.
  • Reviews fail if Codex leaves tracked or untracked changes behind.
  • Snapshot changes block apply unless the only change is the bot’s own review comment.

Audit

npm run audit compares live GitHub state with generated records without moving files. It reports missing open records, archived open records, stale records, duplicates, protected-label proposed closes, and stale review-status records. Protected proposed closes are reported only for active items/ records because archived closed/ records are historical and cannot be applied. Missing open records are classified as eligible, maintainer-authored, protected, or recently created so strict audit mode can flag actionable drift without treating expected queue lag or excluded items as failures. Use --update-dashboard to publish the latest audit health into this README without making every normal dashboard heartbeat scan all open GitHub items. Audit Health includes a copyable item_numbers input for reviewable findings such as missing eligible records, reopened archived records, and stale reviews. The workflow refreshes Audit Health on a separate six-hour schedule, and it can be run manually with audit_dashboard=true.

Local Run

Requires Node 24.

source ~/.profile
npm install
npm run build
npm run plan -- --batch-size 5 --shard-count 100 --max-pages 250 --codex-model gpt-5.5 --codex-reasoning-effort high --codex-service-tier fast
npm run review -- --openclaw-dir ../openclaw --batch-size 5 --max-pages 250 --artifact-dir artifacts/reviews --codex-model gpt-5.5 --codex-reasoning-effort high --codex-service-tier fast --codex-timeout-ms 600000
npm run apply-artifacts -- --artifact-dir artifacts/reviews
npm run audit -- --max-pages 250 --sample-limit 25 --update-dashboard
npm run reconcile -- --dry-run

Apply unchanged proposals later:

source ~/.profile
npm run apply-decisions -- --limit 20 --apply-kind all

Sync durable review comments without closing:

source ~/.profile
npm run apply-decisions -- --sync-comments-only --comment-sync-min-age-days 7 --processed-limit 1000 --limit 0

Manual review runs are proposal-only even if --apply-closures or workflow input apply_closures=true is set. Use apply_existing=true to apply unchanged proposals later. Scheduled apply runs process both issues and pull requests by default; pass apply_kind=issue or apply_kind=pull_request to narrow a manual run.

Checks

npm run check
npm run oxformat

oxformat is an alias for oxfmt; there is no separate oxformat npm package.

GitHub Actions Setup

Required secrets:

  • OPENAI_API_KEY: OpenAI API key used to log Codex in before review shards run.
  • CODEX_API_KEY: optional compatibility alias for the same key during the login check.
  • OPENCLAW_GH_TOKEN: optional fallback GitHub token for read-heavy openclaw/openclaw scans and artifact publish reconciliation when the GitHub App token is unavailable.
  • CLAWSWEEPER_APP_ID: GitHub App ID for openclaw-ci. Currently 3306130.
  • CLAWSWEEPER_APP_PRIVATE_KEY: private key for openclaw-ci; plan/review jobs use a short-lived GitHub App installation token for read-heavy openclaw/openclaw API calls, and apply/comment-sync jobs use the app token for comments and closes.

Token flow:

  • Review shards log Codex in with OPENAI_API_KEY, then run without OpenAI or Codex token environment variables.
  • ClawSweeper uses the openclaw-ci GitHub App token for read-heavy target context, falling back to OPENCLAW_GH_TOKEN only if app secrets are absent.
  • Apply mode uses the app token for review comments and closes, so GitHub attributes mutations to clawsweeper[bot].
  • The built-in GITHUB_TOKEN commits generated reports back to this repo.

Required app permissions:

  • read access for target scan context
  • write access to openclaw/openclaw issues and pull requests
  • optional Actions write on openclaw/clawsweeper for app-token-based run cancellation or dispatch

About

ClawSweeper scans all issues and PRs and suggest what we can close, and why. It runs every PR / Issue once a week.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • JavaScript 100.0%