[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CYFH67JBZ9YEGQVDCFW3GV":3,"skill-same:01M6CYFH67JBZ9YEGQVDCFW3GV":94},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":40,"linkOnly":41,"markdownContent":42,"markdownBody":43,"frontMatter":44,"refName":47,"commitSha":48,"skillDirectory":49,"forksCount":50,"repositoryHtmlUrl":51,"repositoryHomepageUrl":6,"ownerHtmlUrl":52,"ownerBlogUrl":53,"ownerDescription":54,"updatedAt":55,"install":56,"resources":69},"01M6CYFH67JBZ9YEGQVDCFW3GV","slack",null,"Slack skill for proactive outbound Slack communication: posting a message to a\nchannel or thread, editing an existing bot message, or adding an emoji reaction.\nUse when the bot needs to: (1) post a message somewhere OTHER than the current\nreply (e.g. a different channel, or a side note in the same thread),\n(2) edit a previously-sent bot message (e.g. a progress placeholder), or\n(3) acknowledge a message with a non-verbal emoji reaction.\nNOTE: normal replies to the current message are posted AUTOMATICALLY by the\nruntime — just answer as text. Reach for this skill only for proactive \u002F\nout-of-band sends and message edits.","bubbuild\u002Fbub-contrib","bubbuild","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F264669564?v=4","01M6CYEYPWPQJBCRCMJ415277Z","Bub Build","01M6CYEYVZ5WFRV560SC5E6GKE",19,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fbubbuild\u002Fbub-contrib\u002Fblob\u002Fmain\u002Fpackages\u002Fbub-slack\u002Fsrc\u002Fskills\u002Fslack\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000005","邮件与沟通","SCENARIO","使用场景",[5,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39],"runtime","bot","outbound","message","emoji","reply","only","use","channel","edit","editing","just","text","out-of-band","communication","placeholder","2026-11-10 10:12:30",false,"---\nname: slack\ndescription: |\n  Slack skill for proactive outbound Slack communication: posting a message to a\n  channel or thread, editing an existing bot message, or adding an emoji reaction.\n  Use when the bot needs to: (1) post a message somewhere OTHER than the current\n  reply (e.g. a different channel, or a side note in the same thread),\n  (2) edit a previously-sent bot message (e.g. a progress placeholder), or\n  (3) acknowledge a message with a non-verbal emoji reaction.\n  NOTE: normal replies to the current message are posted AUTOMATICALLY by the\n  runtime — just answer as text. Reach for this skill only for proactive \u002F\n  out-of-band sends and message edits.\nmetadata:\n  channel: slack\n---\n\n# Slack Skill\n\nAgent-facing execution guide for **proactive** Slack outbound communication.\n\nYour ordinary reply to the user is delivered automatically — you do **not** call\nthis skill to answer. Use it only for: proactive sends (another channel\u002Fthread),\nediting a bot message you already posted, or reacting with an emoji.\n\n> The runtime also **auto-acks** every inbound message for you: it reacts ⏳\n> (`:hourglass:`) on receipt and flips to ✅ (`:white_check_mark:`) once you\n> reply. Do **not** add those reactions yourself for the current turn — this\n> skill is only for proactive \u002F out-of-band reactions.\n\n## Env vars\n\n- `BUB_SLACK_BOT_TOKEN` — the bot OAuth token (`xoxb-...`). The runtime sets it\n  in the process environment at startup. The scripts read it from the\n  environment; you do **not** need to pass it or expose its value anywhere.\n\nThe runtime resolves `$PYTHON` (the venv interpreter) and `$SKILL_DIR` (this\nskill's directory) for you in every example below — run the commands verbatim.\nThe scripts are stdlib-only (no `requests`), so they work under the venv python\nwith no extra dependencies.\n\n## Where you are\n\nYour runtime context surfaces Slack identity you can reuse for proactive sends:\n\n- `chat_id` — the current channel ID (e.g. `C0XXXXXX`)\n- `thread_ts` — the current thread's parent ts (present inside a thread; blank at channel root)\n- `ts` — the inbound message's own ts\n\nTo post a proactive message **in the same thread**, pass `--thread-ts \u003Cthread_ts>`.\nTo post at channel root, omit `--thread-ts`.\n\n## Send a message\n\n```bash\n$PYTHON $SKILL_DIR\u002Fscripts\u002Fslack_send.py \\\n  --channel-id \u003CCHANNEL_ID> \\\n  --thread-ts \u003CTHREAD_TS>   # optional; omit for channel root\n  --text -                  # \"-\" reads the body from stdin\n```\n\n```bash\nprintf '*Heads up*\\nHere is a proactive note.' | \\\n  $PYTHON $SKILL_DIR\u002Fscripts\u002Fslack_send.py --channel-id C0XXXXXX --text -\n```\n\nThe script prints the new message's `ts` (e.g. `Sent to ... (ts=1234.0005)`) —\ncapture it to edit the message later.\n\n### Block Kit (optional, richer formatting)\n\nFor structured output (sections, fields, buttons), pass a `blocks` JSON file:\n\n```bash\n$PYTHON $SKILL_DIR\u002Fscripts\u002Fslack_send.py --channel-id C0XXXXXX --blocks-file blocks.json --text \"fallback text\"\n```\n\nAlways include a plain `--text` fallback (shown in notifications) alongside blocks.\nFull Block Kit reference: https:\u002F\u002Fapi.slack.com\u002Fblock-kit\n\n## Edit a message\n\n```bash\n$PYTHON $SKILL_DIR\u002Fscripts\u002Fslack_edit.py \\\n  --channel-id \u003CCHANNEL_ID> \\\n  --ts \u003CTS_OF_BOT_MESSAGE> \\\n  --text -\n```\n\nOnly messages **authored by the bot** can be edited.\n\n## React to a message\n\n```bash\n$PYTHON $SKILL_DIR\u002Fscripts\u002Fslack_react.py \\\n  --channel-id \u003CCHANNEL_ID> \\\n  --ts \u003CMESSAGE_TS> \\\n  --reaction white_check_mark   # emoji name, no colons\n```\n\nCommon reactions: `eyes` (looking at it), `hourglass` (working), `white_check_mark`\n(done), `rocket` (shipped).\n\n## Progress-update pattern (long tasks)\n\nFor long-running work, borrow the send-then-edit model:\n\n1. Post a short acknowledgement in the thread and capture its `ts`:\n   ```bash\n   TS=$(printf 'Working on it…' | $PYTHON $SKILL_DIR\u002Fscripts\u002Fslack_send.py \\\n        --channel-id \u003CCHANNEL_ID> --thread-ts \u003CTHREAD_TS> --text - \\\n        | sed -n 's\u002F.*ts=\\([0-9.]*\\).*\u002F\\1\u002Fp')\n   ```\n2. Add an `:hourglass:` reaction or edit the placeholder with progress.\n3. Do the work.\n4. Edit the placeholder with the final result:\n   ```bash\n   printf '*Done.*\\n\u003Cresult>' | $PYTHON $SKILL_DIR\u002Fscripts\u002Fslack_edit.py \\\n     --channel-id \u003CCHANNEL_ID> --ts \"$TS\" --text -\n   ```\n\nPrefer editing the placeholder over posting many incremental messages.\n\n## Formatting\n\n- Text uses Slack `mrkdwn` by default (`*bold*`, `_italic_`, `` `code` ``, ``` ```block``` ```).\n- Keep proactive messages short and skimmable.\n- For tables or complex layouts, use Block Kit instead of ascii art.\n","# Slack Skill\n\nAgent-facing execution guide for **proactive** Slack outbound communication.\n\nYour ordinary reply to the user is delivered automatically — you do **not** call\nthis skill to answer. Use it only for: proactive sends (another channel\u002Fthread),\nediting a bot message you already posted, or reacting with an emoji.\n\n> The runtime also **auto-acks** every inbound message for you: it reacts ⏳\n> (`:hourglass:`) on receipt and flips to ✅ (`:white_check_mark:`) once you\n> reply. Do **not** add those reactions yourself for the current turn — this\n> skill is only for proactive \u002F out-of-band reactions.\n\n## Env vars\n\n- `BUB_SLACK_BOT_TOKEN` — the bot OAuth token (`xoxb-...`). The runtime sets it\n  in the process environment at startup. The scripts read it from the\n  environment; you do **not** need to pass it or expose its value anywhere.\n\nThe runtime resolves `$PYTHON` (the venv interpreter) and `$SKILL_DIR` (this\nskill's directory) for you in every example below — run the commands verbatim.\nThe scripts are stdlib-only (no `requests`), so they work under the venv python\nwith no extra dependencies.\n\n## Where you are\n\nYour runtime context surfaces Slack identity you can reuse for proactive sends:\n\n- `chat_id` — the current channel ID (e.g. `C0XXXXXX`)\n- `thread_ts` — the current thread's parent ts (present inside a thread; blank at channel root)\n- `ts` — the inbound message's own ts\n\nTo post a proactive message **in the same thread**, pass `--thread-ts \u003Cthread_ts>`.\nTo post at channel root, omit `--thread-ts`.\n\n## Send a message\n\n```bash\n$PYTHON $SKILL_DIR\u002Fscripts\u002Fslack_send.py \\\n  --channel-id \u003CCHANNEL_ID> \\\n  --thread-ts \u003CTHREAD_TS>   # optional; omit for channel root\n  --text -                  # \"-\" reads the body from stdin\n```\n\n```bash\nprintf '*Heads up*\\nHere is a proactive note.' | \\\n  $PYTHON $SKILL_DIR\u002Fscripts\u002Fslack_send.py --channel-id C0XXXXXX --text -\n```\n\nThe script prints the new message's `ts` (e.g. `Sent to ... (ts=1234.0005)`) —\ncapture it to edit the message later.\n\n### Block Kit (optional, richer formatting)\n\nFor structured output (sections, fields, buttons), pass a `blocks` JSON file:\n\n```bash\n$PYTHON $SKILL_DIR\u002Fscripts\u002Fslack_send.py --channel-id C0XXXXXX --blocks-file blocks.json --text \"fallback text\"\n```\n\nAlways include a plain `--text` fallback (shown in notifications) alongside blocks.\nFull Block Kit reference: https:\u002F\u002Fapi.slack.com\u002Fblock-kit\n\n## Edit a message\n\n```bash\n$PYTHON $SKILL_DIR\u002Fscripts\u002Fslack_edit.py \\\n  --channel-id \u003CCHANNEL_ID> \\\n  --ts \u003CTS_OF_BOT_MESSAGE> \\\n  --text -\n```\n\nOnly messages **authored by the bot** can be edited.\n\n## React to a message\n\n```bash\n$PYTHON $SKILL_DIR\u002Fscripts\u002Fslack_react.py \\\n  --channel-id \u003CCHANNEL_ID> \\\n  --ts \u003CMESSAGE_TS> \\\n  --reaction white_check_mark   # emoji name, no colons\n```\n\nCommon reactions: `eyes` (looking at it), `hourglass` (working), `white_check_mark`\n(done), `rocket` (shipped).\n\n## Progress-update pattern (long tasks)\n\nFor long-running work, borrow the send-then-edit model:\n\n1. Post a short acknowledgement in the thread and capture its `ts`:\n   ```bash\n   TS=$(printf 'Working on it…' | $PYTHON $SKILL_DIR\u002Fscripts\u002Fslack_send.py \\\n        --channel-id \u003CCHANNEL_ID> --thread-ts \u003CTHREAD_TS> --text - \\\n        | sed -n 's\u002F.*ts=\\([0-9.]*\\).*\u002F\\1\u002Fp')\n   ```\n2. Add an `:hourglass:` reaction or edit the placeholder with progress.\n3. Do the work.\n4. Edit the placeholder with the final result:\n   ```bash\n   printf '*Done.*\\n\u003Cresult>' | $PYTHON $SKILL_DIR\u002Fscripts\u002Fslack_edit.py \\\n     --channel-id \u003CCHANNEL_ID> --ts \"$TS\" --text -\n   ```\n\nPrefer editing the placeholder over posting many incremental messages.\n\n## Formatting\n\n- Text uses Slack `mrkdwn` by default (`*bold*`, `_italic_`, `` `code` ``, ``` ```block``` ```).\n- Keep proactive messages short and skimmable.\n- For tables or complex layouts, use Block Kit instead of ascii art.\n",{"name":5,"metadata":45,"description":46},{"channel":5},"Slack skill for proactive outbound Slack communication: posting a message to a\nchannel or thread, editing an existing bot message, or adding an emoji reaction.\nUse when the bot needs to: (1) post a message somewhere OTHER than the current\nreply (e.g. a different channel, or a side note in the same thread),\n(2) edit a previously-sent bot message (e.g. a progress placeholder), or\n(3) acknowledge a message with a non-verbal emoji reaction.\nNOTE: normal replies to the current message are posted AUTOMATICALLY by the\nruntime — just answer as text. Reach for this skill only for proactive \u002F\nout-of-band sends and message edits.\n","main","35c84fbc0b8339e5f3c94efb35a83adad292d067","packages\u002Fbub-slack\u002Fsrc\u002Fskills\u002Fslack",23,"https:\u002F\u002Fgithub.com\u002Fbubbuild\u002Fbub-contrib","https:\u002F\u002Fgithub.com\u002Fbubbuild","https:\u002F\u002Fbub.build","Bub it, build it.","2026-11-11 15:30:48",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add bubbuild\u002Fbub-contrib --skill slack",{"tool":62,"command":63},"bunx","bunx skills add bubbuild\u002Fbub-contrib --skill slack",{"tool":65,"command":66},"pnpm","pnpm dlx skills add bubbuild\u002Fbub-contrib --skill slack","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fbubbuild\u002Fbub-contrib\u002Fblob\u002Fmain\u002Fpackages\u002Fbub-slack\u002Fsrc\u002Fskills\u002Fslack\u002FSKILL.md",true,[70,76,82,86,90],{"path":71,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":74,"sourceHtmlUrl":75},"__init__.py","SCRIPT","脚本",348,"https:\u002F\u002Fgithub.com\u002Fbubbuild\u002Fbub-contrib\u002Fblob\u002Fmain\u002Fpackages\u002Fbub-slack\u002Fsrc\u002Fskills\u002Fslack\u002F__init__.py",{"path":77,"resourceType":78,"resourceTypeDesc":79,"sizeBytes":80,"sourceHtmlUrl":81},"resources\u002Fimplementation-playbook.md","REFERENCE","参考文档",36268,"https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcopilot\u002Fobservability-monitoring-slo-implement\u002Fresources\u002Fimplementation-playbook.md",{"path":83,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":84,"sourceHtmlUrl":85},"scripts\u002Fslack_edit.py",3446,"https:\u002F\u002Fgithub.com\u002Fbubbuild\u002Fbub-contrib\u002Fblob\u002Fmain\u002Fpackages\u002Fbub-slack\u002Fsrc\u002Fskills\u002Fslack\u002Fscripts\u002Fslack_edit.py",{"path":87,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":88,"sourceHtmlUrl":89},"scripts\u002Fslack_react.py",2960,"https:\u002F\u002Fgithub.com\u002Fbubbuild\u002Fbub-contrib\u002Fblob\u002Fmain\u002Fpackages\u002Fbub-slack\u002Fsrc\u002Fskills\u002Fslack\u002Fscripts\u002Fslack_react.py",{"path":91,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":92,"sourceHtmlUrl":93},"scripts\u002Fslack_send.py",3740,"https:\u002F\u002Fgithub.com\u002Fbubbuild\u002Fbub-contrib\u002Fblob\u002Fmain\u002Fpackages\u002Fbub-slack\u002Fsrc\u002Fskills\u002Fslack\u002Fscripts\u002Fslack_send.py",[95,121,129,142,150,162],{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":101,"publishedAt":40},"01M6CYFPNE130C5YPK6J05FK5G","tape-dataset-share-review","Export, filter, scan, and review shareable tape datasets produced by `tape-dataset-opendal`. Use when Codex needs to prepare Bub-generated tape data for public sharing, Hugging Face upload, external research handoff, or any review-sensitive export that must run CEL filtering, TruffleHog secret scanning on the staged artifact, and a final conservative LLM audit.","https:\u002F\u002Fgithub.com\u002Fbubbuild\u002Fbub-contrib\u002Fblob\u002Fmain\u002Fpackages\u002Ftape-dataset-opendal\u002Fsrc\u002Fskills\u002Ftape-dataset-share-review\u002FSKILL.md",[],[102,103,104,105,106,107,108,109,110,111,112,31,113,114,115,116,117,118,119,120],"share","review","tape dataset share review","codex","research","run","audit","sharing","trufflehog","generated","filtering","export","scanning","datasets","external research","scan","bub","artifact","upload",{"skillNo":122,"name":123,"nameZh":6,"description":124,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":125,"categories":126,"keywords":127,"publishedAt":40},"01M6CYFMSN49KPA44X7XR862F9","wecom","WeCom channel skill. Return normal replies directly. For proactive sends such as scheduled jobs, use the packaged wecom_send.py script.","https:\u002F\u002Fgithub.com\u002Fbubbuild\u002Fbub-contrib\u002Fblob\u002Fmain\u002Fpackages\u002Fbub-wecom\u002Fsrc\u002Fskills\u002Fwecom\u002FSKILL.md",[],[123,32,31,128],"jobs",{"skillNo":130,"name":131,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":135,"publishedAt":40},"01M6CYFENA72P45DFRZP9NVVM5","qq","QQ C2C and group channel skill. Use when Bub is handling a QQ conversation. In the default tool reply mode, reply by calling qq.send (text or media) and stay silent by not calling it. In direct reply mode, return the reply text; output exactly \u003Cno_reply\u002F> to stay silent.","https:\u002F\u002Fgithub.com\u002Fbubbuild\u002Fbub-contrib\u002Fblob\u002Fmain\u002Fpackages\u002Fbub-qq\u002Fsrc\u002Fskills\u002Fqq\u002FSKILL.md",[],[131,136,118,137,138,139,140,36,141,32,31,29],"calling","default","conversation","Media","tool","direct",{"skillNo":143,"name":144,"nameZh":6,"description":145,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":146,"categories":147,"keywords":148,"publishedAt":40},"01M6CYFC5D1T5JETNW8E99FG73","feishu","Use this skill to respond to messages from feishu channel.","https:\u002F\u002Fgithub.com\u002Fbubbuild\u002Fbub-contrib\u002Fblob\u002Fmain\u002Fpackages\u002Fbub-feishu\u002Fsrc\u002Fskills\u002Ffeishu\u002FSKILL.md",[],[144,149,32,31],"messages",{"skillNo":151,"name":152,"nameZh":6,"description":153,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":154,"categories":155,"keywords":156,"publishedAt":40},"01M6CYF94FXGAF30CRJHN4ZVJ4","discord","Discord Bot integration for sending messages, managing channels, and responding to events.\nUse when Bub needs to: (1) Send messages to Discord channels, (2) Create Discord bot with discord.py,\n(3) Handle Discord events (on_message, on_member_join, etc.), (4) Work with Discord webhooks,\nor (5) Any Discord-related functionality.","https:\u002F\u002Fgithub.com\u002Fbubbuild\u002Fbub-contrib\u002Fblob\u002Fmain\u002Fpackages\u002Fbub-discord\u002Fsrc\u002Fskills\u002Fdiscord\u002FSKILL.md",[],[152,27,25,157,158,149,159,31,160,161,118],"create","integration","work","webhooks","discord bot",{"skillNo":163,"name":164,"nameZh":6,"description":165,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":166,"categories":167,"keywords":168,"publishedAt":40},"01M6CYF72F9EBVVWSSFREAE9TR","dingtalk","DingTalk channel skill. When $dingtalk appears in message context, return your response as text\nand the framework will deliver it. For programmatic sends (e.g. progress updates), use dingtalk_send.","https:\u002F\u002Fgithub.com\u002Fbubbuild\u002Fbub-contrib\u002Fblob\u002Fmain\u002Fpackages\u002Fbub-dingtalk\u002Fsrc\u002Fskills\u002Fdingtalk\u002FSKILL.md",[],[164,36,169,32,31,27,170],"context","framework"]