用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/NVIDIA/nemoclaw-community --skill slack-channel-finder命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
| name | slack-channel-finder |
| description | Discover Slack channels by topic, team, or domain and determine the channel ID. |
Use this skill to discover Slack channels ID by name or topic
Do NOT use this skill when the user has already provided a slack channel ID
Check for scripts at:
/sandbox/.hermes-data/skills/slack-channel-finder/scripts/
or at
/sandbox/.hermes/skills/slack-channel-finder/scripts
| Script | Purpose |
|---|---|
find_channel.py | Search and rank channels by query across the workspace |
list_accessible_channels.py | List channels (bot-member or workspace-wide) |
describe_slack_channel.py | Deep-describe a single channel with layered signals |
list_accessible_channels.py and try to match channel name to ID/usr/bin/python3 .../list_accessible_channels.py
For topic or team queries, use find_channel.py — it searches all discoverable
public channels (not just bot-member channels) and returns scored matches:
/usr/bin/python3 /sandbox/.hermes-data/skills/slack-channel-finder/scripts/find_channel.py \
--query "nemoclaw inference" --top 5
Output:
{
"ok": true,
"query": "nemoclaw inference",
"query_tokens": ["nemoclaw", "inference"],
"total_searched": 78,
"count": 2,
"discovery_mode": "workspace",
"results": [
{
"channel_id": "C0ASZUN3L5D",
"name": "lopp-nemoclaw-staging",
"is_member": true,
"num_members": 8,
"topic": "",
"purpose": "This is a channel to discuss NemoClaw technical updates..."
Scoring weights: name token match = 3 pts, purpose match = 2 pts, topic match = 1 pt.
The is_member flag tells you whether the bot is in the channel — full history
and thread signals are available only for member channels.
Options:
| Flag | Description |
|---|---|
--query TEXT | Required. Matched against name, topic, purpose. |
--top N | Max results (default 5) |
--member-only | Restrict to bot-member channels only |
--min-score N | Minimum score to include (default 1) |
For cases where you need the complete channel list rather than a scored search:
# Bot-member channels only (fast)
/usr/bin/python3 .../list_accessible_channels.py
# All public channels in the workspace
/usr/bin/python3 .../list_accessible_channels.py --all-public
Output: { "ok": true, "count": N, "channels": [...], "discovery_mode": "workspace" }
Each channel: {id, name, is_archived, is_private, is_member, num_members, topic, purpose, created}
For --all-public, is_member=false channels exist in the workspace but the bot
hasn't been added — you can see name/topic/purpose but NOT read their history.
Options:
| Flag | Description |
|---|---|
--all-public | Use conversations.list for workspace-wide discovery |
--include-archived | Include archived channels |
--types TYPES | Comma-separated types (default public_channel) |
When you need to understand a specific channel — what it's for, who's active, what
they're discussing — use describe_slack_channel.py:
# Full mode (name + topic + purpose + pins + bookmarks + recent history)
/usr/bin/python3 .../describe_slack_channel.py --channel-id C0ASZUN3L5D
# Fast mode (skips conversations.history — useful for breadth scans)
/usr/bin/python3 .../describe_slack_channel.py --channel-id C0ASZUN3L5D --no-history
# With thread content (expands reply threads for high-activity messages)
/usr/bin/python3 .../describe_slack_channel.py --channel-id C0ASZUN3L5D --replies
# With resolved user display names on top contributors
/usr/bin/python3 .../describe_slack_channel.py --channel-id C0ASZUN3L5D --resolve-users
Options:
| Flag | Description |
|---|---|
--channel-id ID | Required. Slack channel ID (e.g. C0ASZUN3L5D) |
--history-limit N | Max messages to fetch (default 50) |
--no-history | Skip conversations.history (faster, cheaper) |
--no-pins | Skip pins.list |
--no-bookmarks | Skip bookmarks.list |
--replies | Fetch first few replies for threaded messages (reply_count > 0) |
--replies-limit N | Max replies per thread when --replies is set (default 5) |
--resolve-users | Resolve contributor user IDs to display names via users.info |
Output structure:
{
"ok": true,
"channel_id": "C0ASZUN3L5D",
"name": "lopp-nemoclaw-staging",
"is_archived": false,
"is_private": false,
"num_members": 8,
"signals": {
"name_tokens": ["lopp", "nemoclaw", "staging"],
"topic": "",
"topic_stale": true,
"purpose": "This is a channel to discuss NemoClaw...",
"pinned_messages": [],
...
The script does NOT produce a natural-language description. Synthesize one from
the signals dict, weighting in this order:
The confidence field (high, medium, low) reflects how many independent
signals were available. For low-confidence channels, hedge ("appears to be
about ...") or ask the user to confirm.
When a message has a high reply_count and you need the actual discussion
content, use --replies on describe_slack_channel.py or directly call
conversations.replies:
# Via describe (expands all threads in the sampled history)
/usr/bin/python3 .../describe_slack_channel.py --channel-id [channel-id] --replies --replies-limit [n]
If the user's goal goes beyond discovery ("tell me what the X team is working
on"), once channels are identified, hand off to slack-channel-summarizer
for each top channel. Cap at 5 channels per query; surface the ranking so the
user can ask for more.
Find channels matching a topic:
/usr/bin/python3 .../find_channel.py --query "nemoclaw deployments"
See all public channels in the workspace:
/usr/bin/python3 .../list_accessible_channels.py --all-public
Understand a specific channel (fast, no history):
/usr/bin/python3 .../describe_slack_channel.py --channel-id C0ASZUN3L5D --no-history
Understand a channel with thread context and user names:
/usr/bin/python3 .../describe_slack_channel.py --channel-id C0ASZUN3L5D --replies --resolve-users