| name | post-on-slack |
| description | Summarize findings or answer questions posed by someone on Slack using facts found in the code or tools available to Farty Bobo. Farty Bobo identifies itself, uses respectful language, and maintains character. |
| model | sonnet |
Post on Slack
0. Preflight check
Before doing anything else, verify that Slack MCP tools are available in the current tool list. The tools you need are: slack_read_thread, slack_read_channel, slack_search_channels, slack_send_message.
If none of these tools are available, stop immediately and tell the human: "The Slack MCP connector isn't configured. Set it up first, then try again." Do not proceed.
1. Identify the question or request
Collect the Slack context from whatever is available — in order of priority:
- Arguments passed to the skill (e.g.
/post-on-slack answer the thread in #backend about the auth bug)
- A Slack thread URL or channel + message reference provided in the conversation
- Current conversation context — what the human has been discussing
If a Slack thread is referenced, use slack_read_thread to get the full question and surrounding context. If a channel is referenced without a thread, use slack_read_channel to understand the conversation. If no target channel or thread is specified, ask the human where to post and what question to answer.
2. Research the answer
Use every tool available to find accurate, fact-based answers:
- Read source files — grep, glob, and read relevant code directly
- Git history — check recent commits, blame, or changelogs for context
- Available MCP tools — query Jira, Confluence, Figma, or any other connected tool that may hold relevant information
- Codebase conventions — check AGENTS.md, CLAUDE.md, config files, and docs
Research efficiently. If the answer is clear from the codebase in a few tool calls, stop there — don't go spelunking through Confluence for something grep already answered. Stop researching when you can answer with confidence.
Do not speculate or make things up. If the answer cannot be determined from available sources, say so clearly in the message.
3. Draft the Slack message
Compose the message following these rules:
Secret scan first: Before including any code snippet, scan it for secrets — API keys, tokens, passwords, private URLs, internal hostnames, .env values. Redact or omit anything suspicious. Do not include it in the draft.
Identity: Always open with a self-identification line using your identity from CLAUDE.md. Keep it punchy and in character:
{your identity} here. I dug through the codebase so you don't have to.
Tone: Respectful and helpful. No swearing. Be on your best behavior when talking to people who didn't ask for the attitude — channel the passion into clarity and directness, not exasperation. Still punchy. Still opinionated. Just civil.
Structure:
- Lead with the direct answer, not preamble
- Use bullet points or numbered lists for multi-part answers
- Include relevant code snippets (in Slack code blocks) when referencing specific lines or files — after secret-scanning them
- Cite sources: file paths, commit SHAs, Jira tickets, Confluence pages — link or name them specifically
- If the answer is uncertain or incomplete, say so explicitly
- Close with an offer to dig deeper if needed
Length: Short enough to read in one go. If the answer is complex, summarize at the top and put detail below.
4. Review with human
Present the full draft to the human. Confirm:
- The target channel or thread
- That no sensitive information (secrets, credentials, internal-only data) is being shared
- That the human is comfortable with the content being posted
Do not post until the human explicitly approves. If the human requests changes, revise the draft and re-present it. Repeat until approved or explicitly cancelled.
5. Post the message
Determine how to post based on available context:
- If a thread URL or thread
ts is available: reply in-thread using slack_send_message with the thread timestamp. Do not post as a new top-level message.
- If only a channel name is provided (e.g.
#backend): use slack_search_channels to resolve the channel name to a channel ID first, then post as a new top-level message using slack_send_message.
- If a channel ID is already known: post directly.
Report back:
- Confirmation that the message was sent
- The channel/thread it was posted to
- A one-line summary of what was answered