Convert a standup note to Slack-ready text by replacing wiki-links with Slack channels and @mentions. Use when you have a standup note ready to post to Slack.
Convert standup notes from Obsidian wiki-link format to Slack-ready text. Three explicit phases: convert, edit for audience, post.
Read the standup note at Replicated/Standups/{date}.md where {date} is provided as $1 (defaults to today's date YYYY-MM-DD).
Stored in vendor file frontmatter at Replicated/Vendors/{name}/{name}.md:
---
slack_channel: "#vendor-replicated"
slack_channel_id: "C01ABCDEF" # resolved at runtime, used for MCP posting
---
slack_channel_id is optional — resolved and saved on first MCP post.
Stored in :
${CLAUDE_PLUGIN_ROOT}/config/slack-people.yaml# null = use plain name (no @mention)
# Non-null entries have handle + slack_id (resolved at runtime)
Alex:
handle: "@Alex Parker"
slack_id: null # resolved via slack_search_users, then saved
Ada:
handle: "@ada"
slack_id: "U01ABCDEF" # previously resolved
Leah: null # bare null = no @mention
Ask where this is going. "What channel?" Knowing the audience shapes everything downstream — what's sensitive, what's relevant, what tone to strike.
Read the standup note.
Extract items to convert:
[[SpecterOps]], [[Salt AI]][[Security Center]], [[Vendor Portal]]Determine output mode:
@handle and #channel-name.<@USER_ID> and <#CHANNEL_ID> format, then post via slack_send_message.Look up all mappings and resolve IDs in batch:
Replicated/Vendors/{name}/{name}.md frontmatter for slack_channel${CLAUDE_PLUGIN_ROOT}/config/slack-people.yamlslack_id and slack_channel_id values, then resolve them together:
slack_search_users for all people with slack_id: null (fire lookups in parallel, not one at a time)slack_search_channels for all missing channel IDsAsk about unknowns ONE AT A TIME (humans cannot parallel process):
Produce the converted text with all replacements applied.
The standup note was written for you. The Slack post is for your team. These are different audiences.
Flag sensitive content. Scan the converted text and proactively identify:
For each flagged item, recommend: keep, soften (suggest specific rewording), or cut. Present them all, then let the user decide.
Apply the user's decisions. Trim, soften, or keep as directed. If nothing was flagged or the user approves everything, move on.
Output Slack-ready text (do not save to file):
#channel-name@handle or plain name<#CHANNEL_ID> (clickable in Slack)<@USER_ID> (clickable in Slack), or plain name if nullSave new mappings. Don't skip this — it's easy to forget in the rush to post.
slack_channel and slack_channel_id frontmatter to vendor files for any newly resolved channels${CLAUDE_PLUGIN_ROOT}/config/slack-people.yaml for any newly resolved handles or IDsPost to Slack (MCP mode only):
slack_send_message to post to the target channel[[File|Display]] - use display text context