ClawSweeper is the conservative maintenance bot for OpenClaw repositories. Keep changes narrow, evidence-backed, and automation-safe.
- Main code:
src/clawsweeper.ts. - Repair lane code:
src/repair/; durable generated state lives inopenclaw/clawsweeper-state. - Tests:
test/clawsweeper.test.ts. - Workflow:
.github/workflows/sweep.yml. - Explainer:
README.md; state/dashboard repo:../clawsweeper-state. - Open/reviewed records in state repo:
records/<repo-slug>/items/<number>.md. - Archived records in state repo:
records/<repo-slug>/closed/<number>.md. - Scratch/generated output:
.artifacts/,artifacts/,apply-report.json.
Preserve one flat items/ and closed/ report layout per repository slug. Do
not split reports into issue/PR subtrees.
- Review lane is proposal-only. It never closes GitHub items.
- Apply lane mutates GitHub by syncing the durable Codex review comment and then closing only unchanged, high-confidence proposals.
- Repository-specific rules live in
src/repository-profiles.ts; ClawHub apply may close only PRs that are certainly implemented onmain. - Worker concurrency is shard-level: each shard processes its selected items
sequentially. Maximum parallel Codex sessions equals
shard_count, notbatch_size * shard_count. openclaw/clawsweeper-stateis the live status surface and generated state store. Check current Actions and that repo before trusting local generated timestamps.- When Peter asks about PRs outside
openclaw/clawsweeper, treat the task as monitoring/debugging how ClawSweeper workflows operate on that PR. Do not fix foreign PR branches directly; ClawSweeper repair/automerge workflows own those branch edits. - When referencing GitHub issues or PRs in user-facing output, always include
the full GitHub URL, not only
#12345.
- Do not run live apply/close commands unless Peter explicitly asks.
- For apply-path repros, copy one report into a temp
items/dir and pass--skip-dashboard,--item-number, and a temp--closed-dir. - Treat maintainer-authored and protected-label items as non-closeable.
- Snapshot or
updated_atdrift blocks apply unless the only change is the existing ClawSweeper review comment. - Open-but-locked issues can exist when stale automation locked a closed issue and the author later reopened it. These must be skipped, not allowed to crash the apply run.
- Locked-comment 403s from GitHub are terminal apply skips, not retryable API failures.
corepack enable
pnpm install
pnpm run build
pnpm run test:unit
pnpm run format
pnpm run checkUse pnpm run check before handoff for code/test/workflow changes.
Useful live probes:
gh run list --repo openclaw/clawsweeper --limit 20 --json databaseId,displayTitle,status,conclusion,createdAt,updatedAt
gh api repos/openclaw/clawsweeper/readme --jq '.content' | base64 --decode
gh api graphql -f query='query { repository(owner:"openclaw", name:"openclaw") { issues(states: OPEN) { totalCount } pullRequests(states: OPEN) { totalCount } } }'For throughput/default tuning, inspect and update both src/clawsweeper.ts and
.github/workflows/sweep.yml; continuation paths can otherwise keep stale
defaults.