Source profileQuality 84/100

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.

Best for

    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

    PlatformStatusEvidenceWhat to check
    CodexNot declaredNo explicit evidencePortability before use
    Claude CodeNot declaredNo explicit evidencePortability before use
    CursorNot declaredNo explicit evidencePortability before use
    Gemini CLINot declaredNo explicit evidencePortability before use
    Open the compatibility checker

    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.

    Source-detected install commandSource
    npx skills add https://github.com/pulumi/docs --skill ".claude/commands/slack-to-issue"
    Safe inspection promptEditorial

    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

    1. 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
    2. 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.
    3. 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.
    4. 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):
    5. 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

    medium · line 327

    The documentation includes network, browsing, or remote request actions.

    Create the issue manually: https://github.com/pulumi/docs/issues/new?template=0-docs-issue.md

    Evidence record

    Why each signal appears

    EvidenceSourceComputedTestedEditorial
    SignalValueEvidence typeMeaning
    Quality score84/100ComputedDocumentation, specificity, maintenance, and trust rules
    Repository stars178SourceRepository attention, not individual Skill quality
    Compatibility0 platformsSourceDeclared in the catalog source record
    Usage guideautomated source guideEditorialGenerated 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-setup and 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}:

    ComponentHow to extract
    Channel IDSegment after /archives/ (e.g., C08ABC12345)
    Message timestampRemove the leading p, then insert a . before the last 6 digits (e.g., p12345678901234561234567890.123456)
    Thread timestampValue 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 areaTarget repo
    Registry / Package docs, provider-specific documentation, individual provider or SDK API referencepulumi/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

    1. Stop at Step 1 if Slack plugin is missing — show setup instructions, do not continue
    2. Never create an issue without Step 5 confirmation — always preview first
    3. needs-triage is always included — it is the entry point for the triage workflow
    4. Target repo is pulumi/docs or pulumi/registry — determined in Step 3 based on affected area
    5. 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