pulumi/docs/.claude/commands/slack-to-issue/SKILL.md
slack-to-issue
Fetch a Slack message and create a well-structured GitHub issue in pulumi/docs or pulumi/registry
- Source repository stars
- 178
- Declared platforms
- 0
- Static risk flags
- 1
- Last source update
- 2026-08-04
- Source checked
- 2026-08-04
Decision brief
What it does—and where it fits
Convert a Slack message or thread into a GitHub issue in the appropriate Pulumi docs repository.
Not for
- Tasks that require unconfirmed production actions or broad system permissions.
- Environments where the pinned source and install steps cannot be inspected.
Compatibility matrix
Platform support, with evidence labels
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
Inspect first. Install second.
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/pulumi/docs --skill ".claude/commands/slack-to-issue"Inspect the Agent Skill "slack-to-issue" from https://github.com/pulumi/docs/blob/c6501a9070af13d99cce54d64afe2e760fa9b040/.claude/commands/slack-to-issue/SKILL.md at commit c6501a9070af13d99cce54d64afe2e760fa9b040. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
What the source asks the agent to do
- 01
Usage
Required: Full Slack message URL (from "Copy link" on any Slack message)
Required: Full Slack message URL (from "Copy link" on any Slack message)Example: /slack-to-issue https://pulumi-community.slack.com/archives/C01234ABCDE/p1234567890123456 - 02
Process
CRITICAL: Complete all 6 steps in sequence. Display [Step X/6] before each step heading. Never skip a step.
Found (any Slack tools returned): Plugin is available. Load the tools and continue.Not found: Display the setup instructions from slack-to-issue:references:slack-setup and stop. Do not continue to Step 2.CRITICAL: Complete all 6 steps in sequence. Display [Step X/6] before each step heading. Never skip a step. - 03
[Step 1/6] Check Prerequisites and Parse URL
Use ToolSearch with query "slack" to discover available Slack tools.
Found (any Slack tools returned): Plugin is available. Load the tools and continue.Not found: Display the setup instructions from slack-to-issue:references:slack-setup and stop. Do not continue to Step 2.Use ToolSearch with query "slack" to discover available Slack tools. - 04
[Step 2/6] Fetch Slack Content
For thread URLs (URL contains threadts parameter):
For thread URLs (URL contains threadts parameter):Use the Slack tool for reading a thread, passing the channel ID and thread timestamp (the threadts parameter value).For channel message URLs (no threadts parameter): - 05
[Step 3/6] Analyze Content
Read the fetched Slack content and extract:
Core problem: What issue is the user describing?Affected area: Which docs page, feature, or topic is involved?URLs mentioned: Any pulumi.com, GitHub, or docs links in the conversation
Permission review
Static risk signals and limitations
Network access
The documentation includes network, browsing, or remote request actions.
Create the issue manually: https://github.com/pulumi/docs/issues/new?template=0-docs-issue.mdEvidence record
Why each signal appears
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 84/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 178 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Provenance and original SKILL.md
- Repository
- pulumi/docs
- Skill path
- .claude/commands/slack-to-issue/SKILL.md
- Commit
- c6501a9070af13d99cce54d64afe2e760fa9b040
- License
- Apache-2.0
- Collected
- 2026-08-04
- Default branch
- master
View the original SKILL.md
/slack-to-issue
Convert a Slack message or thread into a GitHub issue in the appropriate Pulumi docs repository.
Usage
/slack-to-issue <slack-url>
Required: Full Slack message URL (from "Copy link" on any Slack message)
Example: /slack-to-issue https://pulumi-community.slack.com/archives/C01234ABCDE/p1234567890123456
Process
CRITICAL: Complete all 6 steps in sequence. Display [Step X/6] before each step heading. Never skip a step.
[Step 1/6] Check Prerequisites and Parse URL
1. Verify Slack plugin:
Use ToolSearch with query "slack" to discover available Slack tools.
- Found (any Slack tools returned): Plugin is available. Load the tools and continue.
- Not found: Display the setup instructions from
slack-to-issue:references:slack-setupand stop. Do not continue to Step 2.
2. Parse the Slack URL from {{arg}}:
Extract these components from the URL path ...slack.com/archives/{CHANNEL_ID}/p{TIMESTAMP_RAW}:
| Component | How to extract |
|---|---|
| Channel ID | Segment after /archives/ (e.g., C08ABC12345) |
| Message timestamp | Remove the leading p, then insert a . before the last 6 digits (e.g., p1234567890123456 → 1234567890.123456) |
| Thread timestamp | Value of thread_ts query param, if present (already in decimal format) |
Display a summary:
Channel: [CHANNEL_ID]
Message timestamp: [MESSAGE_TS]
Type: [Thread reply | Channel message]
If the URL cannot be parsed as a Slack message link, display an error and ask the user to paste a valid URL from Slack's "Copy link" option.
[Step 2/6] Fetch Slack Content
For thread URLs (URL contains thread_ts parameter):
Use the Slack tool for reading a thread, passing the channel ID and thread timestamp (the thread_ts parameter value).
For channel message URLs (no thread_ts parameter):
Use the Slack tool for reading a channel's recent messages, passing the channel ID, then locate the message matching the extracted timestamp.
Display the fetched content:
## Slack Content
Channel: #[channel-name]
Date: [formatted date]
[Message text]
[Thread replies, if any — show author and text for each]
If fetching fails (access denied, channel not found, message too old):
❌ Could not fetch message: [error]
Options:
- Paste the message text directly so we can continue
- Check that the Slack app has access to this channel
- See slack-to-issue:references:slack-setup for troubleshooting
Offer to accept manually pasted text to continue. If the user provides text, use it in place of the fetched content.
[Step 3/6] Analyze Content
Read the fetched Slack content and extract:
- Core problem: What issue is the user describing?
- Affected area: Which docs page, feature, or topic is involved?
- URLs mentioned: Any
pulumi.com, GitHub, or docs links in the conversation - Fix PRs: Any GitHub PR links mentioned in the thread (e.g.,
github.com/pulumi/*/pull/*) - Code or error snippets: Any stack traces, error messages, or code blocks
Use this analysis to infer the issue classification. Then ask:
AskUserQuestion:
header: "Issue type"
question: "What kind of issue does this Slack message describe?"
options: (based on analysis; put the most likely first with "(Recommended)")
- "Bug: Docs contain incorrect or outdated information"
- "Gap: Information is missing or undocumented"
- "Clarity: Content is confusing or hard to follow"
- "Enhancement: Request for new or expanded content"
Then ask:
AskUserQuestion:
header: "Affected area"
question: "Which part of the docs is affected?"
options: (derive the most likely from message context; put it first with "(Recommended)")
- "[Detected area from message]"
- "Pulumi IaC / Core SDK"
- "Pulumi Cloud"
- "Pulumi ESC"
- "Registry / Package docs"
- "Getting started / Tutorials"
- "Other (I'll specify in the body)"
Determine target repository based on the confirmed affected area:
| Affected area | Target repo |
|---|---|
| Registry / Package docs, provider-specific documentation, individual provider or SDK API reference | pulumi/registry |
| All other areas (core SDK docs, getting started, concepts, CLI, cloud console, tutorials, etc.) | pulumi/docs |
If the affected area is ambiguous (e.g., the thread mentions both a provider issue and a core docs gap), ask:
AskUserQuestion:
header: "Target repo"
question: "Which repository should this issue be filed in?"
options:
- "pulumi/docs — core documentation site (Recommended)"
- "pulumi/registry — provider and package documentation"
Store the confirmed issue type, affected area, target repo, and any fix PR links for use in Steps 4–6.
[Step 4/6] Draft Issue
Generate a draft issue title and body using the guidelines in slack-to-issue:references:issue-templates.
Title generation:
- Format:
[Component]: [concise description](e.g.,Pulumi ESC: Missing example for environment variable interpolation) - Sentence case after the colon, imperative mood, under 80 characters
- Derive component from confirmed area (Step 3)
Ask for title confirmation:
AskUserQuestion:
header: "Issue title"
question: "Does this title accurately describe the issue?"
options:
- "[Generated title]" (Recommended)
- "Edit the title"
- "Generate a different title"
If the user chooses to edit: accept freeform input. If "Generate a different title": produce an alternative and ask again.
Check for duplicate issues using keywords from the confirmed title:
gh issue list --repo [TARGET_REPO] --state open --search "[keywords]" --limit 5
If matches are found, display them and ask:
AskUserQuestion:
header: "Duplicates?"
question: "Similar open issues were found. How would you like to proceed?"
options:
- "File new issue anyway (Recommended)"
- "Cancel — I'll comment on an existing issue instead"
If the user cancels, display the matching issue URLs and exit without creating a new issue.
If fix PRs were detected in the thread (Step 3), include a note in the issue body:
> **Note**: A fix may already be in progress: [PR URL]
Place this note at the end of the "Suggestions for a fix" section.
Fetch the available labels from the target repo:
gh label list --repo [TARGET_REPO] --limit 100 --json name,description
Use the results to offer relevant label options. Always exclude needs-triage from the list (it is applied automatically). Present the 3–4 most relevant labels based on the issue type and affected area, ordered by relevance. If no labels seem relevant beyond needs-triage, present the top options from the full list.
AskUserQuestion:
header: "Labels"
multiSelect: true
question: "Which labels apply? (needs-triage is always included)"
options: [derived from gh label list output — real label names only]
needs-triage is always applied and does not need to be selected.
[Step 5/6] Preview and Confirm
Display the complete issue preview:
## Issue Preview
Repository: [TARGET_REPO]
Title: [title]
Labels: needs-triage[, additional labels]
---
[Full issue body rendered as markdown]
Ask for final confirmation:
AskUserQuestion:
header: "Confirm"
question: "Ready to create this issue?"
options:
- "Yes, create the issue" (Recommended)
- "Edit the title"
- "Edit the body"
- "Cancel"
Handle each response:
- Edit title: Prompt for new title, return to preview
- Edit body: Show the current body, ask for replacement text, return to preview
- Cancel: Display "Issue creation cancelled. No changes made." and exit
[Step 6/6] Create Issue and Notify
Create the issue:
gh issue create \
--repo [TARGET_REPO] \
--title "{{CONFIRMED_TITLE}}" \
--body "{{CONFIRMED_BODY}}" \
--label "needs-triage"
Apply any additional labels selected in Step 4 using --label for each.
On success, display:
✅ Issue created: [ISSUE_URL]
Offer Slack notification:
AskUserQuestion:
header: "Slack reply"
question: "Post a reply in the Slack thread linking to the new issue?"
options:
- "Yes, post the reply" (Recommended)
- "No thanks"
If yes, use the Slack tool for sending a message to reply in the original channel/thread:
Issue filed: [ISSUE_URL]
Display final confirmation:
✅ Done! Issue: [ISSUE_URL]
[✅ Slack reply posted | ⏭️ Slack reply skipped]
Critical Rules
- Stop at Step 1 if Slack plugin is missing — show setup instructions, do not continue
- Never create an issue without Step 5 confirmation — always preview first
needs-triageis always included — it is the entry point for the triage workflow- Target repo is
pulumi/docsorpulumi/registry— determined in Step 3 based on affected area - Display
[Step X/6]before each step heading for progress tracking
Error Recovery
If any step fails unexpectedly:
❌ Failed to [action]
Error: [error message]
Recovery options:
- Retry this step
- /slack-to-issue [url] (restart from Step 1)
- Create the issue manually: https://github.com/pulumi/docs/issues/new?template=0-docs-issue.md
Alternatives
Compare before choosing
K-Dense-AI/scientific-agent-skills
biopython
Comprehensive molecular biology toolkit. Use for sequence manipulation, file parsing (FASTA/GenBank/PDB), phylogenetics, and programmatic NCBI/PubMed access (Bio.Entrez). Best for batch processing, custom bioinformatics pipelines, BLAST automation. For quick lookups use gget; for multi-service integration use bioservices.
event4u-app/agent-config
project-analyzer
ONLY when user asks for single-pass tech-stack detection or `agents/evidence/analysis/` write-up. Deep multi-pass audit → `universal-project-analysis`. Raw primitives → `project-analysis-core`.
mgiovani/cc-arsenal
team-review
Multi-agent review team: architecture, security, performance, testing, style, docs/UX, plus an adversary that cross-examines the other 6, for security-sensitive, architectural, or large PRs (15+ files) where a single-agent pass risks missing cross-cutting issues. Use for auth/payments/PII changes, schema/pattern changes, compliance sign-off, or when asked to 'get the review team on this' / 'multi-agent review' / 'thorough review before merge'. For a standard PR or a quick pre-merge check, use /r
event4u-app/agent-config
readme-writing-package
Use when creating or rewriting a README for a reusable package or library. Focus on installability, minimal usage example, compatibility, and developer onboarding.