Clawdtributor Use for the queue: Discord-discovered OpenClaw PRs/issues that need live GitHub status plus maintainer-quality review. Compose with other skills - : local Discord archive sync/search. - : live GitHub PR/issue review, duplicate search, close/land rules. - : related issue/PR and current-main/stale-proof search. - / : proof choice when a candidate needs real validation. Archive flow Local archive first; verify freshness for current questions. Resolve channel if needed: Current known channel id from prior work: . Re-resolve if it stops matching. Extract recent refs: Map a PR/issue b…

\\t' \"$HOME/.discrawl/discrawl.db\" \"\nselect m.created_at,\n coalesce(nullif(mm.username,''), nullif(mm.global_name,''), m.author_id)\nfrom messages m\nleft join members mm on mm.guild_id=m.guild_id and mm.user_id=m.author_id\nwhere m.channel_id='1458141495701012561'\n and m.content like '%github.com/openclaw/openclaw/\u003cpull-or-issues>/\u003cnumber>%'\norder by m.created_at desc\nlimit 1;\"\n```\n\nShow only `@handle` in the final list. Do not write the word Discord unless the user asks for source details.\n\n## Live GitHub recheck\n\nAlways recheck live state before listing, closing, or saying \"open\".\n\n```bash\nGITHUB_TOKEN= GITHUB_TOKEN_NODIFF= GH_TOKEN= \\\ngh api repos/openclaw/openclaw/pulls/\u003cnumber> \\\n --jq '. | {number,title,state,merged,mergeable,draft,author:.user.login,url:.html_url,updatedAt:.updated_at,additions,deletions,changedFiles:.changed_files}'\n```\n\nFor issues:\n\n```bash\nGITHUB_TOKEN= GITHUB_TOKEN_NODIFF= GH_TOKEN= \\\ngh api repos/openclaw/openclaw/issues/\u003cnumber> \\\n --jq '. | {number,title,state,author:.user.login,url:.html_url,updatedAt:.updated_at,pull_request}'\n```\n\nIf `gh` says bad credentials, clear env vars with empty assignments as above. Use `--jq '. | {...}'` for object projections.\n\n## Review depth\n\nFor each open item, inspect enough to classify risk:\n\n- PR body, linked issue, comments, files, additions/deletions, checks.\n- Current `origin/main` code path and adjacent tests.\n- Related threads with `gitcrawl neighbors/search`.\n- Whether main already fixed it, the PR is obsolete, or the idea is invalid.\n- Blast radius: touched runtime surfaces, config/schema, plugin/core boundary, user-visible behavior, release/package surface.\n- Verification: say if local unit/docs proof is enough, live/provider proof is needed, or it is not directly verifiable.\n\nDo not close from title alone. If closing as done on main or nonsensical, prove it against current main and comment first when mutation is requested. Bulk close/reopen above 5 requires explicit scope.\n\n## Candidate selection\n\nWhen asked for `5 new`, exclude refs already surfaced in the session and refill from the archive until there are 5 live-open candidates. If fewer than 5 remain open, list all open ones and say how many short.\n\nWhen asked to `update`, `refresh`, `recheck`, `check again`, or similar, return an updated live-open candidate list. Sort by maintainer importance, not recency: high-impact ready fixes first, then useful-but-review-first, then open/not-ready items. Do not include a \"changed since last pass\" section or bottom-line merged/closed summary unless the user explicitly asks for churn.\n\nPrefer:\n\n- Fresh, open, external contributor work.\n- Small, high-confidence bugfixes.\n- Clear repro, tests, or obvious code-path proof.\n\nDemote:\n\n- Broad product/features without owner decision.\n- Large rewrites with unclear contract.\n- PRs already in progress, merged, closed, duplicate, or fixed on main.\n\n## Topic grouping\n\nGroup only when useful or requested:\n\n- Agents/tooling\n- Providers/auth/models\n- Channels/messaging\n- UI/web\n- Gateway/protocol/runtime\n- Config/memory/cache\n- Docker/install/release\n- Docs/tests/chore\n- Closed/obsolete\n\nInfer topic from labels, touched files, title/body, and actual code path.\n\n## Output format\n\nNo Markdown tables. Compact bullets. Use color/risk markers:\n\n- 🟢 low/narrow\n- 🟡 medium or needs targeted proof\n- 🔴 broad/high runtime risk\n- 🟣 security/policy/owner-boundary slow review\n- ✅ merged\n- ⚪ closed unmerged\n\nRequired line shape:\n\n```markdown\n- **PR #81244** `@whatsskill.` `+118/-1` `bug` 🟢 https://github.com/openclaw/openclaw/pull/81244 - Prevents chat action buttons from overlapping short assistant replies. Verifiable: yes. Blast: web chat rendering, low.\n- **Issue #81245** `@alice` `LOC n/a` `bug` 🟡 https://github.com/openclaw/openclaw/issues/81245 - Reports duplicate Telegram replies when reconnecting after gateway restart. Verifiable: partial. Blast: Telegram channel runtime, medium.\n```\n\nRules:\n\n- Bold the `PR #n` or `Issue #n` marker.\n- Use `@handle`, not author bio text.\n- Always include the full GitHub URL.\n- Include a one-line description after the URL, separated with `-`.\n- PR LOC is `+additions/-deletions`; issue LOC is `LOC n/a`.\n- Type: `bug`, `feature`, `perf`, `security`, `docs`, `test`, `chore`, or `refactor`.\n- Write a full sentence for what it does.\n- Always include blast radius in one phrase.\n- Always include `verifiable: yes|partial|no` plus the shortest proof hint when helpful.\n- If status is not open, still show it only when the user asked for all surfaced refs; use ✅ or ⚪ and state merged/closed.\n- For refresh-style asks, prefer section order: `Best Open Now`, `Useful But Review First`, `Still Open / Not Ready`. Omit merged/closed churn by default.\n---","attachment_filenames":[],"attachments":[],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":1},"content":[{"text":"Clawdtributor","type":"text"}]},{"type":"paragraph","content":[{"text":"Use for the ","type":"text"},{"text":"#clawtributors","type":"text","marks":[{"type":"code_inline"}]},{"text":" queue: Discord-discovered OpenClaw PRs/issues that need live GitHub status plus maintainer-quality review.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Compose with other skills","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"$discrawl","type":"text","marks":[{"type":"code_inline"}]},{"text":": local Discord archive sync/search.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"$openclaw-pr-maintainer","type":"text","marks":[{"type":"code_inline"}]},{"text":": live GitHub PR/issue review, duplicate search, close/land rules.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"$gitcrawl","type":"text","marks":[{"type":"code_inline"}]},{"text":": related issue/PR and current-main/stale-proof search.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"$openclaw-testing","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"$crabbox","type":"text","marks":[{"type":"code_inline"}]},{"text":": proof choice when a candidate needs real validation.","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Archive flow","type":"text"}]},{"type":"paragraph","content":[{"text":"Local archive first; verify freshness for current questions.","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"discrawl status --json\ndiscrawl sync","type":"text"}]},{"type":"paragraph","content":[{"text":"Resolve channel if needed:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"sqlite3 \"$HOME/.discrawl/discrawl.db\" \\\n \"select id,name from channels where name like '%clawtributor%' order by name;\"","type":"text"}]},{"type":"paragraph","content":[{"text":"Current known channel id from prior work: ","type":"text"},{"text":"1458141495701012561","type":"text","marks":[{"type":"code_inline"}]},{"text":". Re-resolve if it stops matching.","type":"text"}]},{"type":"paragraph","content":[{"text":"Extract recent refs:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"sqlite3 \"$HOME/.discrawl/discrawl.db\" \"\nselect m.created_at, coalesce(nullif(mm.username,''), m.author_id), m.content\nfrom messages m\nleft join members mm on mm.guild_id=m.guild_id and mm.user_id=m.author_id\nwhere m.channel_id='1458141495701012561'\n and m.created_at >= '\u003cISO cutoff>'\norder by m.created_at desc;\" |\nperl -nE 'while(m{github\\.com/openclaw/openclaw/(pull|issues)/(\\d+)}g){say \"$1\\t$2\\t$_\"}'","type":"text"}]},{"type":"paragraph","content":[{"text":"Map a PR/issue back to the Discord handle:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"sqlite3 -separator

Clawdtributor Use for the queue: Discord-discovered OpenClaw PRs/issues that need live GitHub status plus maintainer-quality review. Compose with other skills - : local Discord archive sync/search. - : live GitHub PR/issue review, duplicate search, close/land rules. - : related issue/PR and current-main/stale-proof search. - / : proof choice when a candidate needs real validation. Archive flow Local archive first; verify freshness for current questions. Resolve channel if needed: Current known channel id from prior work: . Re-resolve if it stops matching. Extract recent refs: Map a PR/issue b…

\\t' \"$HOME/.discrawl/discrawl.db\" \"\nselect m.created_at,\n coalesce(nullif(mm.username,''), nullif(mm.global_name,''), m.author_id)\nfrom messages m\nleft join members mm on mm.guild_id=m.guild_id and mm.user_id=m.author_id\nwhere m.channel_id='1458141495701012561'\n and m.content like '%github.com/openclaw/openclaw/\u003cpull-or-issues>/\u003cnumber>%'\norder by m.created_at desc\nlimit 1;\"","type":"text"}]},{"type":"paragraph","content":[{"text":"Show only ","type":"text"},{"text":"@handle","type":"text","marks":[{"type":"code_inline"}]},{"text":" in the final list. Do not write the word Discord unless the user asks for source details.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Live GitHub recheck","type":"text"}]},{"type":"paragraph","content":[{"text":"Always recheck live state before listing, closing, or saying \"open\".","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"GITHUB_TOKEN= GITHUB_TOKEN_NODIFF= GH_TOKEN= \\\ngh api repos/openclaw/openclaw/pulls/\u003cnumber> \\\n --jq '. | {number,title,state,merged,mergeable,draft,author:.user.login,url:.html_url,updatedAt:.updated_at,additions,deletions,changedFiles:.changed_files}'","type":"text"}]},{"type":"paragraph","content":[{"text":"For issues:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"GITHUB_TOKEN= GITHUB_TOKEN_NODIFF= GH_TOKEN= \\\ngh api repos/openclaw/openclaw/issues/\u003cnumber> \\\n --jq '. | {number,title,state,author:.user.login,url:.html_url,updatedAt:.updated_at,pull_request}'","type":"text"}]},{"type":"paragraph","content":[{"text":"If ","type":"text"},{"text":"gh","type":"text","marks":[{"type":"code_inline"}]},{"text":" says bad credentials, clear env vars with empty assignments as above. Use ","type":"text"},{"text":"--jq '. | {...}'","type":"text","marks":[{"type":"code_inline"}]},{"text":" for object projections.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Review depth","type":"text"}]},{"type":"paragraph","content":[{"text":"For each open item, inspect enough to classify risk:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"PR body, linked issue, comments, files, additions/deletions, checks.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Current ","type":"text"},{"text":"origin/main","type":"text","marks":[{"type":"code_inline"}]},{"text":" code path and adjacent tests.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Related threads with ","type":"text"},{"text":"gitcrawl neighbors/search","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Whether main already fixed it, the PR is obsolete, or the idea is invalid.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Blast radius: touched runtime surfaces, config/schema, plugin/core boundary, user-visible behavior, release/package surface.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Verification: say if local unit/docs proof is enough, live/provider proof is needed, or it is not directly verifiable.","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Do not close from title alone. If closing as done on main or nonsensical, prove it against current main and comment first when mutation is requested. Bulk close/reopen above 5 requires explicit scope.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Candidate selection","type":"text"}]},{"type":"paragraph","content":[{"text":"When asked for ","type":"text"},{"text":"5 new","type":"text","marks":[{"type":"code_inline"}]},{"text":", exclude refs already surfaced in the session and refill from the archive until there are 5 live-open candidates. If fewer than 5 remain open, list all open ones and say how many short.","type":"text"}]},{"type":"paragraph","content":[{"text":"When asked to ","type":"text"},{"text":"update","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"refresh","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"recheck","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"check again","type":"text","marks":[{"type":"code_inline"}]},{"text":", or similar, return an updated live-open candidate list. Sort by maintainer importance, not recency: high-impact ready fixes first, then useful-but-review-first, then open/not-ready items. Do not include a \"changed since last pass\" section or bottom-line merged/closed summary unless the user explicitly asks for churn.","type":"text"}]},{"type":"paragraph","content":[{"text":"Prefer:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Fresh, open, external contributor work.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Small, high-confidence bugfixes.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Clear repro, tests, or obvious code-path proof.","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Demote:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Broad product/features without owner decision.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Large rewrites with unclear contract.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"PRs already in progress, merged, closed, duplicate, or fixed on main.","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Topic grouping","type":"text"}]},{"type":"paragraph","content":[{"text":"Group only when useful or requested:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Agents/tooling","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Providers/auth/models","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Channels/messaging","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"UI/web","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Gateway/protocol/runtime","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Config/memory/cache","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Docker/install/release","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Docs/tests/chore","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Closed/obsolete","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Infer topic from labels, touched files, title/body, and actual code path.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Output format","type":"text"}]},{"type":"paragraph","content":[{"text":"No Markdown tables. Compact bullets. Use color/risk markers:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"🟢 low/narrow","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"🟡 medium or needs targeted proof","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"🔴 broad/high runtime risk","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"🟣 security/policy/owner-boundary slow review","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"✅ merged","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"⚪ closed unmerged","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Required line shape:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"markdown"},"content":[{"text":"- **PR #81244** `@whatsskill.` `+118/-1` `bug` 🟢 https://github.com/openclaw/openclaw/pull/81244 - Prevents chat action buttons from overlapping short assistant replies. Verifiable: yes. Blast: web chat rendering, low.\n- **Issue #81245** `@alice` `LOC n/a` `bug` 🟡 https://github.com/openclaw/openclaw/issues/81245 - Reports duplicate Telegram replies when reconnecting after gateway restart. Verifiable: partial. Blast: Telegram channel runtime, medium.","type":"text"}]},{"type":"paragraph","content":[{"text":"Rules:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Bold the ","type":"text"},{"text":"PR #n","type":"text","marks":[{"type":"code_inline"}]},{"text":" or ","type":"text"},{"text":"Issue #n","type":"text","marks":[{"type":"code_inline"}]},{"text":" marker.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Use ","type":"text"},{"text":"@handle","type":"text","marks":[{"type":"code_inline"}]},{"text":", not author bio text.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Always include the full GitHub URL.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Include a one-line description after the URL, separated with ","type":"text"},{"text":"-","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"PR LOC is ","type":"text"},{"text":"+additions/-deletions","type":"text","marks":[{"type":"code_inline"}]},{"text":"; issue LOC is ","type":"text"},{"text":"LOC n/a","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Type: ","type":"text"},{"text":"bug","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"feature","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"perf","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"security","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"docs","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"test","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"chore","type":"text","marks":[{"type":"code_inline"}]},{"text":", or ","type":"text"},{"text":"refactor","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Write a full sentence for what it does.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Always include blast radius in one phrase.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Always include ","type":"text"},{"text":"verifiable: yes|partial|no","type":"text","marks":[{"type":"code_inline"}]},{"text":" plus the shortest proof hint when helpful.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"If status is not open, still show it only when the user asked for all surfaced refs; use ✅ or ⚪ and state merged/closed.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"For refresh-style asks, prefer section order: ","type":"text"},{"text":"Best Open Now","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"Useful But Review First","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"Still Open / Not Ready","type":"text","marks":[{"type":"code_inline"}]},{"text":". Omit merged/closed churn by default.","type":"text"}]}]}]},{"type":"hr","attrs":{"markup":"---"}}]},"metadata":{"date":"2026-06-05","name":"clawdtributor","author":"@skillopedia","source":{"stars":376042,"repo_name":"clawdis","origin_url":"https://github.com/steipete/clawdis/blob/HEAD/.agents/skills/clawdtributor/SKILL.md","repo_owner":"steipete","body_sha256":"a7e16d408043de378c5ad5776bf22ecfcb1a9be470df85a0e498e25a3f24f028","cluster_key":"394ad39a217863f2dcd0532b4e2f8a1886ff1275b77dd7dc9c447049ce4584cc","clean_bundle":{"format":"clean-skill-bundle-v1","source":"steipete/clawdis/.agents/skills/clawdtributor/SKILL.md","bundle_sha256":"442bdb7c47f759834edfa1efcf07af2ab98ba6be0d4e0bc3646b55e64461138a","attachment_count":0,"text_attachments":0,"binary_attachments":0},"cluster_size":1,"skill_md_path":".agents/skills/clawdtributor/SKILL.md","import_metadata":{"date":"2026-06-05","author":"@skillopedia","version":"v1","category":"browser-automation-scraping","category_label":"Browser"},"exact_dupes_collapsed_into_this":0},"version":"v1","category":"browser-automation-scraping","import_tag":"clean-skills-v1","description":"Use for OpenClaw clawtributors PR/issue triage: Discrawl discovery, live-open rechecks, deep review, topic grouping, and compact @handle/LOC/type/blast/verification summaries."}},"renderedAt":1782987554057}

Clawdtributor Use for the queue: Discord-discovered OpenClaw PRs/issues that need live GitHub status plus maintainer-quality review. Compose with other skills - : local Discord archive sync/search. - : live GitHub PR/issue review, duplicate search, close/land rules. - : related issue/PR and current-main/stale-proof search. - / : proof choice when a candidate needs real validation. Archive flow Local archive first; verify freshness for current questions. Resolve channel if needed: Current known channel id from prior work: . Re-resolve if it stops matching. Extract recent refs: Map a PR/issue b…