
Agent
FRENZYARC
About this agent
ClawSweeper scans all issues and PRs and suggest what we can close, and why. It runs every PR / Issue once a week.
ClawSweeper
ClawSweeper is the conservative maintenance bot for OpenClaw repositories. It
currently covers openclaw/openclaw, openclaw/clawhub, and self-review for
openclaw/clawsweeper.
It has two independent lanes:
- issue/PR sweeper: 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 - commit sweeper: reviews code-bearing commits that land on
main, writes one
canonical markdown report per commit, and optionally publishes a GitHub Check
Run for that commit
Capabilities
- Repository profiles: per-repository rules live in
src/repository-profiles.ts, so OpenClaw, ClawHub, and ClawSweeper can share
the same engine while keeping different apply limits. - Issue and PR intake: scheduled runs scan open issues and pull requests,
while target repositories can forward exact issue/PR events with
repository_dispatchfor low-latency one-item reviews. - Codex review reports: each issue or PR becomes
records/<repo-slug>/items/<number>.mdwith the decision, evidence, proposed
maintainer-facing comment, runtime metadata, and GitHub snapshot hash. - Durable review comments: ClawSweeper syncs one marker-backed public review
comment per item and edits it in place instead of posting repeated comments.
Pull request comments include hidden verdict markers, and actionable PR
follow-up includes a hiddenclawsweeper-action:fix-requiredmarker for the
trusted ClawSweeper repair loop. See
docs/pr-review-comments.md. - Guarded apply: apply mode re-fetches live GitHub state, checks labels,
maintainer authorship, paired issue/PR state, snapshot drift, and repository
profile rules before commenting or closing anything. - Archive and reopen handling: closed or already-closed reports move to
records/<repo-slug>/closed/<number>.md; reopened archived items move back to
items/as stale work. - Dashboard: this README contains the generated fleet dashboard with current
run state, cadence health, recent reviews, recent closes, and work candidates. - Workflow status markers:
pnpm run statusupdates per-repository README
status blocks so long-running workflows can publish progress without changing
report data. - Audit:
pnpm run auditcompares live GitHub state with report storage and
can publish Audit Health into this README without mutating issues or PRs. - Reconcile:
pnpm run reconcilerepairs report placement drift such as
reopened archived records or closed items still sitting initems/. - Work candidates: valid, narrow items can be marked as
queue_fix_prcandidates for manual ClawSweeper repair promotion. - Commit review: push events on target
mainbranches can dispatch to
.github/workflows/commit-review.yml, which expands the commit range, skips
non-code-only commits cheaply, starts one Codex worker per code-bearing
commit, and writesrecords/<repo-slug>/commits/<sha>.md. - Manual reruns and backfills: both lanes support manual workflow dispatch.
Commit review supports exact SHAs, historic ranges withbefore_sha, and an
additional_promptinput for one-off review instructions. - Commit report queries:
pnpm commit-reports -- --since 24h,
--findings,--non-clean,--repo, and--authormake the flat per-SHA
commit storage easy to review by time window without date folders. - Optional commit checks: commit reports are the source of truth; target
commit Check Runs are disabled by default and can be enabled per run or repo. - ClawSweeper repair dispatch: commit reports with
result: findingscan
dispatch to the repair intake, where an audit record is written and a PR is
created only when the finding is narrow, non-security, and still relevant on
latestmain.
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.
Repository profiles can further narrow apply. ClawHub and ClawSweeper self-review
are intentionally stricter: they review issues and PRs, but apply may close only
PRs where current main already implements the proposed change with
source-backed evidence.
Maintainer Commands
Maintainers can steer ClawSweeper from target-repo issue and PR comments. The
router accepts /clawsweeper ..., /automerge, /autoclose <reason>,
@clawsweeper ..., @clawsweeper[bot] ..., @openclaw-clawsweeper ..., and
@openclaw-clawsweeper[bot] ....
Common commands:
TEXT/clawsweeper status /clawsweeper re-review /clawsweeper fix ci /clawsweeper address review /clawsweeper rebase /clawsweeper automerge /clawsweeper approve /clawsweeper explain /clawsweeper stop /automerge /autoclose <maintainer close reason> @clawsweeper re-review
statusandexplainpost a short target summary.re-reviewdispatches a fresh ClawSweeper issue/PR review without starting
repair.fix ci,address review, andrebasedispatch the repair worker only for
ClawSweeper PRs or PRs already opted intoclawsweeper:automerge.automergelabels an open PR, creates or reuses the adopted job, dispatches
review, and enters the bounded review/fix/merge loop.approvelets a maintainer clear a ClawSweeper human-review pause and merge
only after the normal exact-head, checks, mergeability, and gate checks pass.stopaddsclawsweeper:human-review;/autoclose <reason>closes the
item and bounded linked same-repo targets with an explicit maintainer reason.
Only maintainers are accepted. The router checks repository collaborator
permission (admin, maintain, or write) and falls back to trusted
author_association values when permission lookup is unavailable. Contributor
commands are ignored without a reply. Scheduled comment routing is dry unless
CLAWSWEEPER_COMMENT_ROUTER_EXECUTE=1; workflow dispatch with execute=true
can be used for one-off live routing.
Dashboard
Last dashboard update: Apr 29, 2026, 15:34 UTC
Fleet
| Metric | Count |
|---|---|
| Covered repositories | 3 |
| Open issues | 4426 |
| Open PRs | 3434 |
| Open items total | 7860 |
| Reviewed files | 7508 |
| Unreviewed open items | 355 |
| Due now by cadence | 2878 |
| Proposed closes awaiting apply | 1 |
| Work candidates awaiting promotion | 721 |
| Closed by Codex apply | 10815 |
| Failed or stale reviews | 19 |
| Archived closed files | 14386 |
Repositories
| Repository | Open | Reviewed | Unreviewed | Due | Proposed closes | Work candidates | Closed | Latest review | Latest close | Comments synced, 1h |
|---|---|---|---|---|---|---|---|---|---|---|
| OpenClaw | 6934 | 6584 | 350 | 2808 | 1 | 673 | 10807 | Apr 29, 2026, 15:32 UTC | Apr 29, 2026, 15:33 UTC | 88 |
| ClawHub | 926 | 921 | 5 | 67 | 0 | 47 | 8 | Apr 29, 2026, 15:25 UTC | Apr 29, 2026, 13:48 UTC | 394 |
| ClawSweeper | 0 | 3 | 0 | 3 | 0 | 1 | 0 | Apr 29, 2026, 14:08 UTC | unknown | 0 |
Current Runs
| Repository | State | Updated | Run |
|---|---|---|---|
| OpenClaw | Review comments checked | Apr 29, 2026, 15:34 UTC | run |
| ClawHub | Review publish complete | Apr 29, 2026, 15:26 UTC | run |
| ClawSweeper | Idle | unknown | none |
Fleet Activity
Latest review: Apr 29, 2026, 15:32 UTC. Latest close: Apr 29, 2026, 15:33 UTC. Latest comment sync: Apr 29, 2026, 15:34 UTC.
| Window | Reviews | Close decisions | Keep-open decisions | Failed/stale reviews | Closed | Comments synced | Apply skips |
|---|---|---|---|---|---|---|---|
| Last 15 minutes | 87 | 3 | 84 | 4 | 7 | 38 | 2 |
| Last hour | 1422 | 28 | 1394 | 11 | 27 | 482 | 5 |
| Last 24 hours | 6029 | 369 | 5660 | 15 | 762 | 1036 | 28 |
Recently Closed Across Repos
| Repository | Item | Title | Reason | Closed | Report |
|---|---|---|---|---|---|
| openclaw/openclaw | #72080 | [Bug]: ACP child sessions report stopReason="stop" with usage=0 before harness completes, causing parent agents to abandon mid-flight | already implemented on main | Apr 29, 2026, 15:33 UTC | records/openclaw-openclaw/closed/72080.md |
| openclaw/openclaw | #65131 | Feature Request: Option to hide system messages from Control UI chat window | already implemented on main | Apr 29, 2026, 15:32 UTC | records/openclaw-openclaw/closed/65131.md |
| openclaw/openclaw | #65123 | fix(discord): preserve explicit target kind when parsing recipients | already implemented on main | Apr 29, 2026, 15:32 UTC | records/openclaw-openclaw/closed/65123.md |
| openclaw/openclaw | #64830 | [Feature] Web UI new session should respect agents.defaults.thinkingDefault and agents.defaults.reasoningDefault | duplicate or superseded | Apr 29, 2026, 15:32 UTC | records/openclaw-openclaw/closed/64830.md |
| openclaw/openclaw | #50762 | Feature request: split chat and live exec logs in Control UI | duplicate or superseded | Apr 29, 2026, 15:32 UTC | records/openclaw-openclaw/closed/50762.md |
| openclaw/openclaw | #44354 | Bug: openclaw health --json reports stale Discord state | closed externally after review | Apr 29, 2026, 15:27 UTC | records/openclaw-openclaw/closed/44354.md |
| openclaw/openclaw | #74371 | Fix Control UI dashboard breadcrumb navigation | closed externally after review | Apr 29, 2026, 15:27 UTC | records/openclaw-openclaw/closed/74371.md |
| openclaw/openclaw | #74435 | fix(memory): use db.loadExtension() instead of sqliteVec.load() for n… | duplicate or superseded | Apr 29, 2026, 15:18 UTC | records/openclaw-openclaw/closed/74435.md |
| openclaw/openclaw | #73614 | fix(logging): expand leading tilde in logging.file (#73587) | closed externally after review | Apr 29, 2026, 15:05 UTC | records/openclaw-openclaw/closed/73614.md |
| openclaw/openclaw | #72310 | [Bug]: Default plugin scanning is unsustainable on mid-range hardware | already implemented on main | Apr 29, 2026, 15:04 UTC | records/openclaw-openclaw/closed/72310.md |
Work Candidates Across Repos
| Repository | Item | Title | Priority | Status | Reviewed | Report |
|---|---|---|---|---|---|---|
| openclaw/openclaw | #74155 | fix(slack): make download-file fileId requirement self-evident to LLMs | high | candidate | Apr 29, 2026, 15:30 UTC | records/openclaw-openclaw/items/74155.md |
| openclaw/openclaw | #63098 | Discord voice: Bot joins channel then immediately leaves with "The operation was aborted" after 2026.4.5 update | high | candidate | Apr 29, 2026, 15:29 UTC | records/openclaw-openclaw/items/63098.md |
| openclaw/clawhub | #874 | Publish silently drops extensionless files and .tsv files | high | candidate | Apr 29, 2026, 15:23 UTC | records/openclaw-clawhub/items/874.md |
| openclaw/clawhub | #737 | Remove duplicate label on @nexecuteinc/cmdbcompass | high | candidate | Apr 29, 2026, 15:22 UTC | records/openclaw-clawhub/items/737.md |
| openclaw/openclaw | #64767 | [Bug] Bloated session jsonl (444 MB) hangs gateway via String.prototype.replace — diagnose with sample+lsof | high | candidate | Apr 29, 2026, 15:20 UTC | records/openclaw-openclaw/items/64767.md |
| openclaw/openclaw | #68126 | Discord DM inbound sets ctx.To to channel:<id> instead of user:<id> | high | candidate | Apr 29, 2026, 15:20 UTC | records/openclaw-openclaw/items/68126.md |
| openclaw/openclaw | #64891 | [Bug]: Hundreds of repeated HTTP requests to 169.254.169.254:80 for the first 10 minutes after the startup | high | candidate | Apr 29, 2026, 15:20 UTC | records/openclaw-openclaw/items/64891.md |
| openclaw/openclaw | #73812 | Fix restart continuations after explicit restarts | high | candidate | Apr 29, 2026, 15:20 UTC | records/openclaw-openclaw/items/73812.md |
| openclaw/openclaw | #74286 | Bug: sub-agent announce completion causes parent session to generate out-of-context replies | high | candidate | Apr 29, 2026, 15:20 UTC | records/openclaw-openclaw/items/74286.md |
| openclaw/openclaw | #70991 | [Bug]: connection drops between gateway and OpenCL Control + unable to stop running task with /stop and button disapear | high | candidate | Apr 29, 2026, 15:19 UTC | records/openclaw-openclaw/items/70991.md |
| openclaw/openclaw | #72382 | [Bug]: General install | high | candidate | Apr 29, 2026, 15:19 UTC | records/openclaw-openclaw/items/72382.md |
| openclaw/openclaw | #64883 | agents: strengthen planning-only detector against dummy tool calls | high | candidate | Apr 29, 2026, 15:19 UTC | records/openclaw-openclaw/items/64883.md |
| openclaw/openclaw | #74363 | Subagent runs can be falsely marked failed/lost after clean gateway close or pending wait | high | candidate | Apr 29, 2026, 15:19 UTC | records/openclaw-openclaw/items/74363.md |
| openclaw/openclaw | #74370 | [Bug] 消息在 memory flush + compaction 后被重复投递 | high | candidate | Apr 29, 2026, 15:18 UTC | records/openclaw-openclaw/items/74370.md |
| openclaw/openclaw | #64903 | Android app crashes on NodeForegroundService startForeground with ForegroundServiceStartNotAllowedException | high | candidate | Apr 29, 2026, 15:18 UTC | records/openclaw-openclaw/items/64903.md |
| Repository | Item | Title | Outcome | Status | Reviewed |
|---|---|---|---|---|---|
| openclaw/openclaw | #74381 | refactor: centralize Discord and Slack DM access resolution | keep_open / kept_open | complete | Apr 29, 2026, 15:32 UTC |
| openclaw/openclaw | #60868 | Agents: detect context overflow across error cause chains | keep_open / kept_open | complete | Apr 29, 2026, 15:32 UTC |
| openclaw/openclaw | #74444 | feat(openai): add queryTask/documentTask config for Jina v5 task-specific embeddings | keep_open / kept_open | complete | Apr 29, 2026, 15:32 UTC |
| openclaw/openclaw | #74445 | fix(deepseek): expose xhigh and max thinking levels for V4 models | close / skipped_changed_since_review | complete | Apr 29, 2026, 15:32 UTC |
| openclaw/openclaw | #74155 | fix(slack): make download-file fileId requirement self-evident to LLMs | keep_open / kept_open | complete | Apr 29, 2026, 15:30 UTC |
| openclaw/openclaw | #74241 | [Bug] Agent timezone desync causes perception drift in multi-timezone setups | keep_open / kept_open | complete | Apr 29, 2026, 15:30 UTC |
| openclaw/openclaw | #72338 | Gateway CPU spin causes Telegram replies to stall and status probe to time out | keep_open / kept_open | complete | Apr 29, 2026, 15:30 UTC |
| openclaw/openclaw | #63279 | 2026.4.8: Large-session overflow/compaction timeout can cascade into GatewayDrainingError + subagent announce loss; fallback chain stale until restart | keep_open / kept_open | complete | Apr 29, 2026, 15:30 UTC |
| openclaw/openclaw | #63098 | Discord voice: Bot joins channel then immediately leaves with "The operation was aborted" after 2026.4.5 update | keep_open / kept_open | complete | Apr 29, 2026, 15:29 UTC |
| openclaw/openclaw | #74150 | fix(agents): forward turnSource* routing fields to plugin.approval.request (#74003) | keep_open / kept_open | complete | Apr 29, 2026, 15:29 UTC |
Repository Details
<details> <summary>OpenClaw (openclaw/openclaw)</summary> <br>Current Run
<!-- clawsweeper-status:openclaw-openclaw:start -->Workflow status
Repository: openclaw/openclaw
Updated: Apr 29, 2026, 15:34 UTC
State: Review comments checked
Checked selected durable Codex review comments and synced missing or stale comments. Synced: 20. Item numbers: 58808,60808,60946,63098,63195,63265,63279,63289,63295,63308,64316,72338,74030,74150,74155,74162,74241,74320,74337,74346.
Run: https://github.com/openclaw/clawsweeper/actions/runs/25117805065
Queue
| Metric | Count |
|---|---|
| Target repository | openclaw/openclaw |
| Open issues | 3539 |
| Open PRs | 3395 |
| Open items total | 6934 |
| Reviewed files | 6584 |
| Unreviewed open items | 350 |
| Archived closed files | 14362 |
Review Outcomes
| Metric | Count |
|---|---|
| Fresh reviewed issues in the last 7 days | 3363 |
| Proposed issue closes | 0 (0% of reviewed issues) |
| Fresh reviewed PRs in the last 7 days | 3212 |
| Proposed PR closes | 1 (0% of reviewed PRs) |
| Fresh verified reviews in the last 7 days | 6575 |
| Proposed closes awaiting apply | 1 (0% of fresh reviews) |
| Work candidates awaiting promotion | 673 |
| Closed by Codex apply | 10807 |
| Failed or stale reviews | 9 |
Cadence
| Metric | Coverage |
|---|---|
| Hourly cadence coverage | 193/1098 current (905 due, 17.6%) |
| Hourly hot item cadence (<7d) | 193/1098 current (905 due, 17.6%) |
| Daily cadence coverage | 2130/3680 current (1550 due, 57.9%) |
| Daily PR cadence | 1515/2568 current (1053 due, 59%) |
| Daily new issue cadence (<30d) | 615/1112 current (497 due, 55.3%) |
| Weekly older issue cadence | 1803/1806 current (3 due, 99.8%) |
| Due now by cadence | 2808 |
Audit Health
<!-- clawsweeper-audit:openclaw-openclaw:start -->Repository: openclaw/openclaw
Last audit: Apr 29, 2026, 12:49 UTC
Status: Action needed
Targeted review input: 65635,72522,72527,72529,72531,72532,72535,72537,72539,72541
| Metric | Count |
|---|---|
| Scan complete | yes |
| Open items seen | 6950 |
| Missing eligible open records | 270 |
| Missing maintainer-authored open records | 36 |
| Missing protected open records | 25 |
| Missing recently-created open records | 27 |
| Archived records that are open again | 0 |
| Stale item records | 3 |
| Duplicate records | 0 |
| Protected proposed closes | 0 |
| Stale reviews | 11 |
| Item | Category | Title | Detail |
|---|---|---|---|
| #65635 | Missing eligible open | fix(gateway): keep explicit loopback binds on 127.0.0.1 | eligible |
| #72522 | Missing eligible open | fix(control-ui): keep chat UI mounted across transient reconnects | eligible |
| #72527 | Missing eligible open | [Bug]: Downgrading from 2026.4.x to 2026.3.2 leaves openclaw.json in invalid/broken state with no warning | eligible |
Latest Run Activity
Latest review: Apr 29, 2026, 15:32 UTC. Latest close: Apr 29, 2026, 15:33 UTC. Latest comment sync: Apr 29, 2026, 15:34 UTC.
| Window | Reviews | Close decisions | Keep-open decisions | Failed/stale reviews | Closed | Comments synced | Apply skips |
|---|---|---|---|---|---|---|---|
| Last 15 minutes | 68 | 3 | 65 | 0 | 7 | 38 | 2 |
| Last hour | 1088 | 28 | 1060 | 1 | 27 | 88 | 5 |
| Last 24 hours | 5092 | 369 | 4723 | 5 | 748 | 626 | 28 |
Recently Closed
| Item | Title | Reason | Closed | Report |
|---|---|---|---|---|
| #72080 | [Bug]: ACP child sessions report stopReason="stop" with usage=0 before harness completes, causing parent agents to abandon mid-flight | already implemented on main | Apr 29, 2026, 15:33 UTC | records/openclaw-openclaw/closed/72080.md |
| #65131 | Feature Request: Option to hide system messages from Control UI chat window | already implemented on main | Apr 29, 2026, 15:32 UTC | records/openclaw-openclaw/closed/65131.md |
| #65123 | fix(discord): preserve explicit target kind when parsing recipients | already implemented on main | Apr 29, 2026, 15:32 UTC | records/openclaw-openclaw/closed/65123.md |
| #64830 | [Feature] Web UI new session should respect agents.defaults.thinkingDefault and agents.defaults.reasoningDefault | duplicate or superseded | Apr 29, 2026, 15:32 UTC | records/openclaw-openclaw/closed/64830.md |
| #50762 | Feature request: split chat and live exec logs in Control UI | duplicate or superseded | Apr 29, 2026, 15:32 UTC | records/openclaw-openclaw/closed/50762.md |
| #44354 | Bug: openclaw health --json reports stale Discord state | closed externally after review | Apr 29, 2026, 15:27 UTC | records/openclaw-openclaw/closed/44354.md |
| #74371 | Fix Control UI dashboard breadcrumb navigation | closed externally after review | Apr 29, 2026, 15:27 UTC | records/openclaw-openclaw/closed/74371.md |
| #74435 | fix(memory): use db.loadExtension() instead of sqliteVec.load() for n… | duplicate or superseded | Apr 29, 2026, 15:18 UTC | records/openclaw-openclaw/closed/74435.md |
| #73614 | fix(logging): expand leading tilde in logging.file (#73587) | closed externally after review | Apr 29, 2026, 15:05 UTC | records/openclaw-openclaw/closed/73614.md |
| #72310 | [Bug]: Default plugin scanning is unsustainable on mid-range hardware | already implemented on main | Apr 29, 2026, 15:04 UTC | records/openclaw-openclaw/closed/72310.md |
Work Candidates
| Item | Title | Priority | Status | Reviewed | Report |
|---|---|---|---|---|---|
| #74155 | fix(slack): make download-file fileId requirement self-evident to LLMs | high | candidate | Apr 29, 2026, 15:30 UTC | records/openclaw-openclaw/items/74155.md |
| #63098 | Discord voice: Bot joins channel then immediately leaves with "The operation was aborted" after 2026.4.5 update | high | candidate | Apr 29, 2026, 15:29 UTC | records/openclaw-openclaw/items/63098.md |
| #64767 | [Bug] Bloated session jsonl (444 MB) hangs gateway via String.prototype.replace — diagnose with sample+lsof | high | candidate | Apr 29, 2026, 15:20 UTC | records/openclaw-openclaw/items/64767.md |
| #68126 | Discord DM inbound sets ctx.To to channel:<id> instead of user:<id> | high | candidate | Apr 29, 2026, 15:20 UTC | records/openclaw-openclaw/items/68126.md |
| #64891 | [Bug]: Hundreds of repeated HTTP requests to 169.254.169.254:80 for the first 10 minutes after the startup | high | candidate | Apr 29, 2026, 15:20 UTC | records/openclaw-openclaw/items/64891.md |
| #73812 | Fix restart continuations after explicit restarts | high | candidate | Apr 29, 2026, 15:20 UTC | records/openclaw-openclaw/items/73812.md |
| #74286 | Bug: sub-agent announce completion causes parent session to generate out-of-context replies | high | candidate | Apr 29, 2026, 15:20 UTC | records/openclaw-openclaw/items/74286.md |
| #70991 | [Bug]: connection drops between gateway and OpenCL Control + unable to stop running task with /stop and button disapear | high | candidate | Apr 29, 2026, 15:19 UTC | records/openclaw-openclaw/items/70991.md |
| #72382 | [Bug]: General install | high | candidate | Apr 29, 2026, 15:19 UTC | records/openclaw-openclaw/items/72382.md |
| #64883 | agents: strengthen planning-only detector against dummy tool calls | high | candidate | Apr 29, 2026, 15:19 UTC | records/openclaw-openclaw/items/64883.md |
Recently Reviewed
| Item | Title | Outcome | Status | Reviewed |
|---|---|---|---|---|
| #74381 | refactor: centralize Discord and Slack DM access resolution | keep_open / kept_open | complete | Apr 29, 2026, 15:32 UTC |
| #60868 | Agents: detect context overflow across error cause chains | keep_open / kept_open | complete | Apr 29, 2026, 15:32 UTC |
| #74444 | feat(openai): add queryTask/documentTask config for Jina v5 task-specific embeddings | keep_open / kept_open | complete | Apr 29, 2026, 15:32 UTC |
| #74445 | fix(deepseek): expose xhigh and max thinking levels for V4 models | close / skipped_changed_since_review | complete | Apr 29, 2026, 15:32 UTC |
| #74155 | fix(slack): make download-file fileId requirement self-evident to LLMs | keep_open / kept_open | complete | Apr 29, 2026, 15:30 UTC |
| #74241 | [Bug] Agent timezone desync causes perception drift in multi-timezone setups | keep_open / kept_open | complete | Apr 29, 2026, 15:30 UTC |
| #72338 | Gateway CPU spin causes Telegram replies to stall and status probe to time out | keep_open / kept_open | complete | Apr 29, 2026, 15:30 UTC |
| #63279 | 2026.4.8: Large-session overflow/compaction timeout can cascade into GatewayDrainingError + subagent announce loss; fallback chain stale until restart | keep_open / kept_open | complete | Apr 29, 2026, 15:30 UTC |
| #63098 | Discord voice: Bot joins channel then immediately leaves with "The operation was aborted" after 2026.4.5 update | keep_open / kept_open | complete | Apr 29, 2026, 15:29 UTC |
| #74150 | fix(agents): forward turnSource* routing fields to plugin.approval.request (#74003) | keep_open / kept_open | complete | Apr 29, 2026, 15:29 UTC |
Current Run
<!-- clawsweeper-status:openclaw-clawhub:start -->Workflow status
Repository: openclaw/clawhub
Updated: Apr 29, 2026, 15:26 UTC
State: Review publish complete
Merged review artifacts for run 25116895225. Folder reconciliation moved tracked files to match current GitHub open/closed state, and the dashboard reflects completed shards.
Run: https://github.com/openclaw/clawsweeper/actions/runs/25116895225
Queue
| Metric | Count |
|---|---|
| Target repository | openclaw/clawhub |
| Open issues | 887 |
| Open PRs | 39 |
| Open items total | 926 |
| Reviewed files | 921 |
| Unreviewed open items | 5 |
| Archived closed files | 24 |
Review Outcomes
| Metric | Count |
|---|---|
| Fresh reviewed issues in the last 7 days | 877 |
| Proposed issue closes | 0 (0% of reviewed issues) |
| Fresh reviewed PRs in the last 7 days | 34 |
| Proposed PR closes | 0 (0% of reviewed PRs) |
| Fresh verified reviews in the last 7 days | 911 |
| Proposed closes awaiting apply | 0 (0% of fresh reviews) |
| Work candidates awaiting promotion | 47 |
| Closed by Codex apply | 8 |
| Failed or stale reviews | 10 |
Cadence
| Metric | Coverage |
|---|---|
| Hourly cadence coverage | 6/58 current (52 due, 10.3%) |
| Hourly hot item cadence (<7d) | 6/58 current (52 due, 10.3%) |
| Daily cadence coverage | 211/211 current (0 due, 100%) |
| Daily PR cadence | 21/21 current (0 due, 100%) |
| Daily new issue cadence (<30d) | 190/190 current (0 due, 100%) |
| Weekly older issue cadence | 642/652 current (10 due, 98.5%) |
| Due now by cadence | 67 |
Audit Health
<!-- clawsweeper-audit:openclaw-clawhub:start -->Repository: openclaw/clawhub
Last audit: Apr 29, 2026, 12:49 UTC
Status: Passing
Targeted review input: none
| Metric | Count |
|---|---|
| Scan complete | yes |
| Open items seen | 927 |
| Missing eligible open records | 0 |
| Missing maintainer-authored open records | 5 |
| Missing protected open records | 0 |
| Missing recently-created open records | 0 |
| Archived records that are open again | 0 |
| Stale item records | 0 |
| Duplicate records | 0 |
| Protected proposed closes | 0 |
| Stale reviews | 0 |
| Item | Category | Title | Detail |
|---|---|---|---|
| None |
Latest Run Activity
Latest review: Apr 29, 2026, 15:25 UTC. Latest close: Apr 29, 2026, 13:48 UTC. Latest comment sync: Apr 29, 2026, 15:05 UTC.
| Window | Reviews | Close decisions | Keep-open decisions | Failed/stale reviews | Closed | Comments synced | Apply skips |
|---|---|---|---|---|---|---|---|
| Last 15 minutes | 19 | 0 | 19 | 4 | 0 | 0 | 0 |
| Last hour | 334 | 0 | 334 | 10 | 0 | 394 | 0 |
| Last 24 hours | 934 | 0 | 934 | 10 | 14 | 407 | 0 |
Recently Closed
| Item | Title | Reason | Closed | Report |
|---|---|---|---|---|
| #1812 | Skill be flagged as suspicious and being marked hidden | closed externally after review | Apr 29, 2026, 13:48 UTC | records/openclaw-clawhub/closed/1812.md |
| #1891 | [codex] remove card link hover underlines | kept open | Apr 29, 2026, 08:25 UTC | records/openclaw-clawhub/closed/1891.md |
| #1889 | fix: restore ClawHub public UI | closed externally after review | Apr 29, 2026, 07:52 UTC | records/openclaw-clawhub/closed/1889.md |
| #1881 | chore(ci): update package publish artifact action | closed externally after review | Apr 29, 2026, 05:31 UTC | records/openclaw-clawhub/closed/1881.md |
| #1880 | feat: add featured plugin curation | kept open | Apr 29, 2026, 05:13 UTC | records/openclaw-clawhub/closed/1880.md |
| #1871 | [codex] Add skills/plugins search typeahead | closed externally after review | Apr 29, 2026, 04:24 UTC | records/openclaw-clawhub/closed/1871.md |
| #1878 | feat: add ClawHub rescan guidance workflow | kept open | Apr 29, 2026, 03:02 UTC | records/openclaw-clawhub/closed/1878.md |
| #1875 | fix: move stars link into settings | closed externally after review | Apr 29, 2026, 02:50 UTC | records/openclaw-clawhub/closed/1875.md |
| #1874 | ci: check oxfmt on pull requests | closed externally after review | Apr 29, 2026, 01:22 UTC | records/openclaw-clawhub/closed/1874.md |
| #1873 | fix: add skill upload button to header | kept open | Apr 29, 2026, 00:32 UTC | records/openclaw-clawhub/closed/1873.md |
Work Candidates
| Item | Title | Priority | Status | Reviewed | Report |
|---|---|---|---|---|---|
| #874 | Publish silently drops extensionless files and .tsv files | high | candidate | Apr 29, 2026, 15:23 UTC | records/openclaw-clawhub/items/874.md |
| #737 | Remove duplicate label on @nexecuteinc/cmdbcompass | high | candidate | Apr 29, 2026, 15:22 UTC | records/openclaw-clawhub/items/737.md |
| #868 | [Bug] clawhub sync fails: Slug is already taken | high | candidate | Apr 29, 2026, 15:17 UTC | records/openclaw-clawhub/items/868.md |
| #371 | Add appeal link for VirusTotal false positives in UI | high | candidate | Apr 29, 2026, 15:16 UTC | records/openclaw-clawhub/items/371.md |
| #379 | VirusTotal badge shows 'Suspicious' despite 0/54 clean scan | high | candidate | Apr 29, 2026, 15:13 UTC | records/openclaw-clawhub/items/379.md |
| #178 | [Bug] clawhub update: fingerprint match always fails (false 'local changes' warning) | high | candidate | Apr 29, 2026, 15:10 UTC | records/openclaw-clawhub/items/178.md |
| #169 | clawhub update always reports 'local changes (no match)' even on freshly installed skills | high | candidate | Apr 29, 2026, 15:10 UTC | records/openclaw-clawhub/items/169.md |
| #48 | publish: 'SKILL.md required' error despite file existing | high | candidate | Apr 29, 2026, 15:10 UTC | records/openclaw-clawhub/items/48.md |
| #1756 | Search results shift after initial render — high-relevance skills missing from top until scroll cycle | high | candidate | Apr 29, 2026, 14:26 UTC | records/openclaw-clawhub/items/1756.md |
| #1575 | Skill search indexing issue and ownership transfer request: realestate-deep-research | high | candidate | Apr 29, 2026, 14:24 UTC | records/openclaw-clawhub/items/1575.md |
Recently Reviewed
| Item | Title | Outcome | Status | Reviewed |
|---|---|---|---|---|
| #1376 | False positive: openclaw-workspace-sync flagged as suspicious | keep_open / kept_open | complete | Apr 29, 2026, 15:25 UTC |
| #1283 | False positive: 7ito/hkroute flagged as suspicious due to bundled CJS | keep_open / kept_open | complete | Apr 29, 2026, 15:24 UTC |
| #1894 | Search ranking question: high-download skill ranks very low | keep_open / kept_open | complete | Apr 29, 2026, 15:24 UTC |
| #874 | Publish silently drops extensionless files and .tsv files | keep_open / kept_open | complete | Apr 29, 2026, 15:23 UTC |
| #701 | False positive: xquik-x-twitter-scraper flagged as suspicious incorrectly | keep_open / kept_open | complete | Apr 29, 2026, 15:23 UTC |
| #769 | [iwencai-screener] 技能被误判为可疑,请求人工审核 | keep_open / kept_open | complete | Apr 29, 2026, 15:23 UTC |
| #878 | False positive: privacy-mask flagged as Suspicious despite declared permissions | keep_open / kept_open | failed | Apr 29, 2026, 15:23 UTC |
| #737 | Remove duplicate label on @nexecuteinc/cmdbcompass | keep_open / kept_open | complete | Apr 29, 2026, 15:22 UTC |
| #900 | deleted account → can’t re-login / button stays live | keep_open / kept_open | complete | Apr 29, 2026, 15:22 UTC |
| #863 | False positive security scan: bria-ai skill flagged as suspicious | keep_open / kept_open | complete | Apr 29, 2026, 15:22 UTC |
Current Run
<!-- clawsweeper-status:openclaw-clawsweeper:start -->Workflow status
Repository: openclaw/clawsweeper
Updated: unknown
State: Idle
No workflow status has been published yet.
<!-- clawsweeper-status:openclaw-clawsweeper:end -->Queue
| Metric | Count |
|---|---|
| Target repository | openclaw/clawsweeper |
| Open issues | 0 |
| Open PRs | 0 |
| Open items total | 0 |
| Reviewed files | 3 |
| Unreviewed open items | 0 |
| Archived closed files | 0 |
Review Outcomes
| Metric | Count |
|---|---|
| Fresh reviewed issues in the last 7 days | 0 |
| Proposed issue closes | 0 (- of reviewed issues) |
| Fresh reviewed PRs in the last 7 days | 3 |
| Proposed PR closes | 0 (0% of reviewed PRs) |
| Fresh verified reviews in the last 7 days | 3 |
| Proposed closes awaiting apply | 0 (0% of fresh reviews) |
| Work candidates awaiting promotion | 1 |
| Closed by Codex apply | 0 |
| Failed or stale reviews | 0 |
Cadence
| Metric | Coverage |
|---|---|
| Hourly cadence coverage | 0/3 current (3 due, 0%) |
| Hourly hot item cadence (<7d) | 0/3 current (3 due, 0%) |
| Daily cadence coverage | 0/0 current (0 due, -) |
| Daily PR cadence | 0/0 current (0 due, -) |
| Daily new issue cadence (<30d) | 0/0 current (0 due, -) |
| Weekly older issue cadence | 0/0 current (0 due, -) |
| Due now by cadence | 3 |
Audit Health
<!-- clawsweeper-audit:openclaw-clawsweeper:start -->No audit has been published yet. Run npm run audit -- --update-dashboard to refresh this section.
Latest Run Activity
Latest review: Apr 29, 2026, 14:08 UTC. Latest close: unknown. Latest comment sync: Apr 29, 2026, 14:08 UTC.
| Window | Reviews | Close decisions | Keep-open decisions | Failed/stale reviews | Closed | Comments synced | Apply skips |
|---|---|---|---|---|---|---|---|
| Last 15 minutes | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Last hour | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Last 24 hours | 3 | 0 | 3 | 0 | 0 | 3 | 0 |
Recently Closed
| Item | Title | Reason | Closed | Report |
|---|---|---|---|---|
| None |
Work Candidates
| Item | Title | Priority | Status | Reviewed | Report |
|---|---|---|---|---|---|
| #19 | test: exercise automerge repair smoke | high | candidate | Apr 29, 2026, 13:41 UTC | records/openclaw-clawsweeper/items/19.md |
Recently Reviewed
| Item | Title | Outcome | Status | Reviewed |
|---|---|---|---|---|
| #20 | test: suppress duplicate remaining-risk prose | keep_open / kept_open | complete | Apr 29, 2026, 14:08 UTC |
| #19 | test: exercise automerge repair smoke | keep_open / kept_open | complete | Apr 29, 2026, 13:41 UTC |
| #18 | docs: document clawsweeper self smoke target | keep_open / kept_open | complete | Apr 29, 2026, 13:18 UTC |
How It Works
ClawSweeper is split into two operational systems:
- issue/PR sweeper: scheduler, review lane, apply lane, audit, reconcile, and
dashboard publishing - commit sweeper: main-branch commit dispatch, cheap code/non-code
classification, one Codex review worker per code-bearing commit, report
publishing, and optional target commit checks
Scheduler
The issue/PR 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 - target repositories can forward issue and PR events with
repository_dispatch; those exact item runs use a dedicated single job to
review one item, sync the durable comment, and apply only safe close
proposals for that same item - 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_numberor comma-separateditem_numbersto review
exact Audit Health findings without scanning for a normal batch. - Each shard checks out the selected target repository at
main. - Codex reviews with
gpt-5.5, high reasoning, fast service tier, and a
10-minute per-item timeout. - Each item becomes a flat report under
records/<repo-slug>/items/<number>.mdwith 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. - PR review comments use hidden verdict/action markers for the trusted
ClawSweeper repair loop; see
docs/pr-review-comments.md.
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
records/<repo-slug>/closed/<number>.md. - Moves reopened archived reports back to the repo’s
items/folder 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.
Exact event runs skip the bulk planner, shard matrix, artifact upload, and
separate publish job. They still use the same review and apply code paths, but
only for the selected item number and only with immediate-safe reasons enabled
by default: implemented_on_main and duplicate_or_superseded.
stale_insufficient_info is never applied to young items; apply requires those
issue reports to be at least 30 days old unless a manual run explicitly changes
the threshold.
The README dashboard is fleet-scoped. Each configured repository gets its own
record folder, workflow status marker, audit-health marker, cadence counts, and
recent activity section. The top dashboard aggregates those repository snapshots
so event runs from one repo do not hide the state of another.
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.
Commit Review Lane
Commit review is intentionally separate from issue/PR cleanup. It never closes
items, writes comments, or fixes code.
- Target repositories forward
pushevents frommainwith
repository_dispatch. - Manual runs can pass
commit_sha, optionalbefore_sha, optional
additional_prompt,enabled, andcreate_checks. - The receiver verifies the selected commits are reachable from
origin/main. - The plan job expands ranges, pages large backfills at GitHub's matrix limit,
and classifies each commit before Codex starts. - Pure documentation, changelog, README/license, and asset-only commits get a
skipped report without spending Codex time. - Mixed commits and code-bearing commits start one Codex worker per commit.
- Codex is prompted to read beyond the diff: changed files, callers/callees,
runtime entry points, adjacent tests/docs, dependency manifests, release
notes, advisories, web sources, and focused live tests when useful. - Each commit writes exactly one report at
records/<repo-slug>/commits/<40-char-sha>.md. - Reruns overwrite the same report, including reruns with an
additional_prompt. - Report results are
nothing_found,findings,inconclusive,failed, or
skipped_non_code. - Optional GitHub Checks use the
ClawSweeper Commit Reviewname on the target
commit. Clean or skipped reports are green; high-confidence high/critical
findings fail; lower-severity, inconclusive, and failed reviews are neutral. - Finding reports are dispatched to the repair intake when
CLAWSWEEPER_COMMIT_FINDINGS_ENABLEDis notfalse. ClawSweeper owns
the audit log and any repair PR.
Use pnpm commit-reports -- --since 24h to review recent reports and add
--findings, --non-clean, --repo, or --author to narrow the list. The
storage stays flat so a rerun can overwrite exactly one file for a commit
without rediscovering a date bucket.
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.
- Issue/PR event jobs create target write and report-push credentials only after
Codex exits. - Commit review workers give Codex only a read-scoped target token as
GH_TOKEN
so it can inspect mentioned issues, PRs, workflow runs, and commit metadata. - Commit write/check credentials are created only after Codex exits.
- CI makes the target 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. - Commit Check Runs are optional and disabled by default.
Audit
pnpm 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 repo items/ records
because archived repo 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.
Issue/PR sweeper:
BASHsource ~/.profile corepack enable pnpm install pnpm run build pnpm run plan -- --target-repo openclaw/openclaw --batch-size 5 --shard-count 100 --max-pages 250 --codex-model gpt-5.5 --codex-reasoning-effort high --codex-service-tier fast pnpm run review -- --target-repo openclaw/openclaw --target-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 pnpm run apply-artifacts -- --target-repo openclaw/openclaw --artifact-dir artifacts/reviews pnpm run audit -- --target-repo openclaw/openclaw --max-pages 250 --sample-limit 25 --update-dashboard pnpm run reconcile -- --target-repo openclaw/openclaw --dry-run
Apply unchanged proposals later:
BASHsource ~/.profile corepack enable pnpm run apply-decisions -- --target-repo openclaw/openclaw --limit 20 --apply-kind all
Sync durable review comments without closing:
BASHsource ~/.profile corepack enable pnpm run apply-decisions -- --target-repo openclaw/openclaw --sync-comments-only --comment-sync-min-age-days 7 --processed-limit 1000 --limit 0
List commit reports:
BASHsource ~/.profile corepack enable pnpm run build pnpm commit-reports -- --since 24h pnpm commit-reports -- --since 24h --findings pnpm commit-reports -- --repo openclaw/openclaw --author steipete --since 7d
Manually rerun commit review through GitHub Actions:
BASHgh workflow run commit-review.yml \ --repo openclaw/clawsweeper \ --ref main \ -f target_repo=openclaw/openclaw \ -f commit_sha=<commit-sha> \ -f before_sha=<parent-or-range-start-sha> \ -f create_checks=false \ -f enabled=true \ -f additional_prompt='Optional extra review focus.'
Omit before_sha for a single-commit review. Pass before_sha to review the
historic range before_sha..commit_sha.
Manual review runs are proposal-only. Use apply_existing=true to apply unchanged
proposals later. Scheduled apply runs process both issues and pull requests by
default, subject to the selected repository profile; pass target_repo,
apply_kind=issue, or apply_kind=pull_request to narrow a manual run.
Scheduled runs cover the configured product profiles. openclaw/openclaw keeps
the existing cadence; openclaw/clawhub runs on offset review/apply/audit crons
so its reports live under records/openclaw-clawhub/ without colliding with
default repo records. openclaw/clawsweeper is available for manual and event
self-review smoke tests.
Target repositories can opt into event-level latency by installing the
dispatcher workflow in docs/target-dispatcher.md.
The dispatcher sends repository_dispatch events to this repository with the
target repo and exact item number; ClawSweeper then runs one event job that
reviews, comments, and checks immediate safe apply instead of waiting for the
next hot-intake cron or bulk publish lane.
Target repositories can opt into main-branch commit review with
docs/commit-dispatcher.md. That dispatcher sends
push ranges to this repository, where ClawSweeper expands the range and writes
one commit report per SHA.
Checks
BASHpnpm run check pnpm run oxformat
oxformat is an alias for oxfmt; there is no separate oxformat pnpm package.
The CI GitHub Actions workflow runs pnpm run check on pushes, pull requests,
and manual dispatches.
GitHub Actions Setup
Required secrets:
OPENAI_API_KEY: OpenAI API key used to log Codex in before review shards run.CLAWSWEEPER_APP_CLIENT_ID: public GitHub App client ID forclawsweeper.
CurrentlyIv23liOECG0slfuhz093.CLAWSWEEPER_APP_PRIVATE_KEY: private key forclawsweeper; plan/review
jobs use a short-lived GitHub App installation token for read-heavy target API
calls, commit review uses a read-scoped target token while Codex runs, and
apply/comment-sync/check jobs use the app token for comments, closes, and
optional checks.
Keep App credentials scoped to theactions/create-github-app-tokenstep.
Review shards run Codex over attacker-controlled issue/PR text, so
codexEnv()also strips these App variables before spawning Codex.
Token flow:
- Review shards log Codex in with
OPENAI_API_KEY, then run without OpenAI or
Codex token environment variables. - ClawSweeper uses the
clawsweeperGitHub App token for read-heavy target
context. - Apply mode uses the same app token for review comments and closes, so GitHub
attributes mutations to the app bot account instead of a PAT user. - Commit review passes Codex only a read-scoped target token as
GH_TOKENfor
issue/PR/workflow/commit hydration, then creates write/check credentials only
after Codex exits. - The built-in
GITHUB_TOKENcommits generated reports back to this repo.
Required clawsweeper app permissions:
- Contents: read/write, for report commits, repair branches, and repository
dispatch inputs that need a contents-scoped installation token. - Issues: read/write, for issue comments, labels, closes, and maintainer command
authorization context. - Pull requests: read/write, for PR comments, labels, merge readiness, repair PRs,
and guarded automerge. - Actions: read/write on
openclaw/clawsweeper, for run cancellation, manual
dispatch, self-heal, and commit-review continuations. - Checks: write on target repositories when commit Check Runs should be
published.
ClawSweeper no longer falls back to PAT-based write tokens. If the GitHub App
installation does not grant the requested permission set, the workflow fails at
token creation instead of silently switching identity.
Target repository setup:
- install the issue/PR dispatcher from
docs/target-dispatcher.md for exact item event
reviews - install the commit dispatcher from
docs/commit-dispatcher.md formaincommit
reviews - set
CLAWSWEEPER_COMMIT_REVIEW_ENABLED=falseto disable commit dispatch
without code changes - set
CLAWSWEEPER_COMMIT_REVIEW_CREATE_CHECKS=trueonly if commit Check Runs
should be published
Chart
Loading chart...
Comments & Discussion
Scroll to load comments...
Share
Loading recommendations...